"""
build_story.py — 根据《葫芦侠行》大纲与原文，生成完整的8章互动剧情JSON
新属性系统：数理根基(shuli)、侠义声望(xiayi)、心志韧性(xinzhi)、好感度(favorability)
"""
import json

story = {
    "title": "葫芦侠行",
    "author": "葫芦数学",
    "description": "北宋年间，紫金山下秉公习武堂。你扮演少年葫芦侠，从初入武堂到创立脑学数堂，经历教习、论道、陷害、审查、悟道，最终揭开的真相将超乎你的想象。",
    "start_node": "ch1_start",
    "nodes": {}
}

def N(node_id, scene, character="旁白", sprite="", choices=None):
    """添加一个故事节点"""
    story["nodes"][node_id] = {
        "scene": scene,
        "character": character,
        "sprite": sprite,
        "choices": choices or []
    }

def C(text, next_node, shuli=0, xiayi=0, xinzhi=0, favorability=None):
    """创建一个选项"""
    c = {"text": text, "next": next_node, "effects": {}}
    if shuli: c["effects"]["shuli"] = shuli
    if xiayi: c["effects"]["xiayi"] = xiayi
    if xinzhi: c["effects"]["xinzhi"] = xinzhi
    if favorability: c["effects"]["favorability"] = favorability
    return c

# ============================
# 第一章：初入江湖（1022年秋）
# ============================
N("ch1_start",
  "公元1022年，九月，暑气未消。紫金山麓的秉公习武堂前，你摸了摸刚剃的光头，腰间的大葫芦随着呼吸轻轻晃动。\n\n"
  "此番远行，你背负着全族人的期盼。故乡泉州乃是东方大港，海贸繁盛，但风浪难测。你要在这天下闻名的学武之地，求得真本领——将那能推演风暴、破译番邦商局、护卫海疆的数理奥义，带回东南海滨的故乡。\n\n"
  "『欲学神功，先明其志。』秉公习武堂有规矩：新入堂者，首月须剪短头发。你摸了摸自己刚剃的光头，深吸一口气，踏入这座传奇学府。",
  "葫芦侠", "",
  [
      C("先去熟悉环境，四处走走看看", "ch1_explore", xinzhi=3),
      C("直奔武林大会布告栏，打听最新消息", "ch1_bulletin", xinzhi=5, xiayi=-2),
      C("找引荐人三力思侠拜访叙旧", "ch1_sanlisi", xiayi=2, favorability={"三力思侠": 10})
  ])

N("ch1_explore",
  "你在习武堂里转了一圈。理殿、工殿、文殿三座大殿巍然矗立，各门各派的弟子来来往往。时间广场的日晷下，几个早起的弟子正在晨读。\n\n"
  "你暗暗记下了几个重要的位置：食堂在西南角，数理门的讲武堂在理殿二层，藏书阁在图文馆东侧。\n\n"
  "一个月的基本功集训开始了。你发现其他门派的子弟大多性情开朗，很快便三五一伙。而你生性腼腆，在人群中总显得有些格格不入。",
  "葫芦侠", "",
  [
      C("在数理门课堂上主动结识欧阳侠和Eddie侠", "ch1_befriend", shuli=5, xiayi=2, favorability={"欧阳侠": 15, "Eddie侠": 15}),
      C("独自在角落埋头苦学，不与人交际", "ch1_solo", shuli=8, xiayi=-3)
  ])

N("ch1_bulletin",
  "你直奔集市口的布告栏，上面贴着各门各派的课程表。但你最关心的武林大会布告上赫然写着：『因周边突发瘟疫，本届武林大会延期举办。』\n\n"
  "旁边几个老弟子议论纷纷：「听说隔壁已有数名弟子中招，内力运转滞涩……」「这软筋散似的疫症，不伤性命，专蚀修为，真是歹毒！」\n\n"
  "你心中一沉。刚来就遇到这种事，但这也让你对习武堂的现状有了更敏锐的认识。",
  "葫芦侠", "",
  [
      C("在数理门课堂上主动结识欧阳侠和Eddie侠", "ch1_befriend", shuli=5, xiayi=2, favorability={"欧阳侠": 15, "Eddie侠": 15}),
      C("独自在角落埋头苦学", "ch1_solo", shuli=8, xiayi=-3)
  ])

N("ch1_sanlisi",
  "你找到了三力思侠的住处。他见到你很是高兴，拉着你坐下喝茶。\n\n"
  "『葫芦侠啊，你能来，我打心底高兴。』三力思侠笑眯眯地说，『这秉公习武堂，讲究的是止戈为武。最强的武功，不是用来炫耀，而是为了守护。你在这里打下的每一分根基，未来都可能化为让家园安全的一份力量。』\n\n"
  "他又压低声音：『对了，我有个好友叫厚朴侠，在话剧社。改天带你去看他的戏，那可是一绝！』",
  "三力思侠", "",
  [
      C("在数理门课堂上主动结识欧阳侠和Eddie侠", "ch1_befriend", shuli=5, xiayi=2, favorability={"欧阳侠": 15, "Eddie侠": 15}),
      C("独自在角落埋头苦学", "ch1_solo", shuli=8, xiayi=-3)
  ])

N("ch1_befriend",
  "在「输血分析」的课堂上，你注意到了两位同窗。一位叫欧阳侠，另一位是Eddie侠。此二人听课极为专注，总抢第一排座位。\n\n"
  "一天清晨，天还未亮，你摸黑赶到讲堂——欧阳侠已在窗下就着晨光翻阅武学典籍，自顾自地比划。旁边的Eddie侠睡眼惺忪，欧阳侠抬手便拍了他一下：『练功当趁早，岂可懈怠！』\n\n"
  "你鼓足勇气上前：「二位师兄，久仰了。江湖皆传数理门最是枯燥艰深，然一旦悟透，便可立于不败之地。敢问师兄可有诀要？」\n\n"
  "欧阳侠抢先答道：「数理乃诸武学之基石。学此门，唯有扎实二字。」Eddie侠揉着肩膀接话：「我却真心喜爱数理。天下武功看似纷繁，唯数理之严谨能令我心神沉淀。」\n\n"
  "一来二去，三人便成了好友。",
  "欧阳侠 & Eddie侠", "",
  [
      C("接受三力思侠的邀请，去看厚朴侠的话剧", "ch1_theater", xiayi=10, favorability={"厚朴侠": 20}),
      C("婉拒邀约，回宿舍预习功课", "ch1_study", shuli=5, favorability={"厚朴侠": -5})
  ])

N("ch1_solo",
  "你选择了独自修炼。每天天不亮就到讲武堂，深夜才回宿舍。你的数理根基日渐扎实，但看着别人三五成群，偶尔也会觉得孤独。\n\n"
  "一天课后，一个叫Eddie侠的同门主动跟你打招呼：「嘿，我看你天天用功得紧，要不要一起去吃饭？」\n\n"
  "你犹豫了一下。",
  "葫芦侠", "",
  [
      C("接受邀请，一起去吃饭", "ch1_befriend", xiayi=3, favorability={"Eddie侠": 5}),
      C("婉拒，继续独自学习", "ch1_theater", shuli=5, xiayi=-5)
  ])

N("ch1_theater",
  "三力思侠带你溜出习武堂看话剧。台上演的正是秉公习武堂创立之初的故事——当年初代堂主因场地所限，另一家武堂深明大义，主动提出互换校区，成就武林一段佳话。\n\n"
  "厚朴侠既是排演主力，又担纲主演，扮相英挺，演技精湛。你第一次对话剧之道有了真切感触。散场后你立刻托三力思侠要到了厚朴侠的住址。\n\n"
  "不久之后，一只灰鸽落在你的窗台，脚上系着竹管。打开一看——竟是厚朴侠主动邀你到他的小院一叙。",
  "厚朴侠", "",
  [
      C("欣然赴约，在百草园与厚朴侠和山韵侠畅谈话剧", "ch1_houpu_visit", xiayi=10, favorability={"厚朴侠": 15}),
      C("回去准备功课，改日再访", "ch1_plague_choice", shuli=5)
  ])

N("ch1_study",
  "你回到宿舍，翻开《输血分析》的课本。数理门的筑基心法果然艰深——输血分析讲的是比武中迅捷疗伤、回复元气的法门；高等逮术则讲究精准擒拿，专克以身法迅捷见长的对手。\n\n"
  "你沉下心，一页页啃下去。虽然错过了结识厚朴侠的机会，但你的数理根基打得更加扎实。",
  "葫芦侠", "",
  [
      C("继续努力学习", "ch1_plague_choice", shuli=5)
  ])

N("ch1_houpu_visit",
  "你如约来到百草园。厚朴侠的家在一楼，带一个小小庭院。客厅不大，却处处透着雅趣——满墙书架、文房四宝、青花瓷罐里飘出药草清香。\n\n"
  "一位叫山韵侠的客人已在座，精于音律与文章。三人越聊越投机。山韵侠忽然提议：『我们一起创作一部话剧，将习武心得放入其中，演给大家看，如何？』\n\n"
  "厚朴侠眼中一亮：「此事大善！小友，你可愿意？」你霍然起身，郑重一揖：「固所愿也，不敢请耳！」三人相视而笑。",
  "厚朴侠 & 山韵侠", "",
  [
      C("加入红灰青蟹，体验温怀一刻", "ch1_qingxie", xiayi=10),
      C("回宿舍继续用功", "ch1_plague_choice", shuli=5)
  ])

N("ch1_qingxie",
  "因你在数理门表现优异，收到了「红灰青蟹」的邀请。这是由几个志趣相投的数理弟子自发结成的小会，每月一次蟹会，品评新奇器械、辩论古怪问题。\n\n"
  "但最让你触动的是「温怀一刻」——在一个月色清朗的夜晚，几位青蟹成员围坐在喷泉广场，陪伴一位因锻造失败而心灰意冷的锻造门师兄。没有说教，没有安慰的话语，只有安静的倾听和理解的分享。\n\n"
  "那夜之后，你在这条红灰青三色的绦带上，感受到了一种超越纯粹学术好奇的温暖。",
  "葫芦侠", "",
  [
      C("瘟疫来袭——做出你的选择", "ch1_plague_choice", xinzhi=5, xiayi=5)
  ])

N("ch1_plague_choice",
  "布告栏上贴出了鲜红的告示：近期周边突发瘟疫，感染上会让武力大幅下降，武林大会推迟。习武堂劝各位侠客选择返乡避疫，或待在住所不要出门。\n\n"
  "欧阳侠面色凝重地来找你：「家中有信来催，我恐怕不日便要动身了。」Eddie侠也苦笑：「我是要回家去的。不知何时才能再与二位兄台这般论道了。」\n\n"
  "你站在二道门前，陷入了两难。",
  "葫芦侠", "",
  [
      C("返乡避疫，保全有用之身（进入【暂别江湖】结局，可重开）", "ch1_ending_leave", xinzhi=-5),
      C("留守武馆，与同道共同闭关修炼", "ch1_stay", shuli=20, xinzhi=20)
  ])

N("ch1_ending_leave",
  "你做出了决定。离开那日，天色阴沉。二道门前不复往日喧嚣，只有寥寥数人默默出行。\n\n"
  "马车载着你驶离紫金山麓。怀中抱着行囊，仿佛抱着这段短暂却充实的时光。你知道，自己的修行并未结束，只是换了一个场地。故乡的斗室，将成为你临时的闭关之地。\n\n"
  "【第一章·暂别江湖】\n你的第一个季度的习武之旅，被一场突如其来的瘟疫画上了仓促的逗号。但属于葫芦侠的江湖，才刚刚拉开序幕。\n\n"
  "——此结局为过渡结局。春暖花开之时，你将再度归来。",
  "系统", "",
  [
      C("春暖花开，重返习武堂（进入第二章）", "ch2_start", shuli=5, xinzhi=5)
  ])

N("ch1_stay",
  "你选择了留下。与几位同样留守的同道一起，在习武堂闭关修炼。\n\n"
  "你翻开《输血分析》和《高等逮术》的课本，沉入数理的深海。没有外界的干扰，你的数理根基以惊人的速度增长。更重要的是，这段共渡难关的经历，让你和留守的同道结下了深厚的情谊。\n\n"
  "瘟疫终于过去，春天来了。你收拾行囊，准备开始新的季度。听说今年的武林大会即将在开学第一周举行，所有人都摩拳擦掌。\n\n"
  "【第一章完 · 闭关修炼】",
  "系统", "",
  [
      C("进入第二章：西部教习", "ch2_start", shuli=10, xinzhi=10)
  ])

# ============================
# 第二章：西部教习（1023年春）
# ============================
N("ch2_start",
  "瘟疫过去了，转眼又是春天。你从泉州驾着马车回到紫金山。\n\n"
  "武林大会的新规则公布了：先在每个门进行内部比武，三人一组破阵，赢的那组派代表参加「十七门论道」。\n\n"
  "数理门的演武场冻得呵气成霜。掌门华师祖在黑板上写了两行字：『连续变化，见微知著；结构规矩，万物皆数。』\n\n"
  "分组结果：你、Eddie侠、欧阳侠一组，对手是紫铜侠那组。紫铜侠练的是「刚性功法」，招式硬邦邦，从未出过差错。\n\n"
  "『紫铜侠的完备性证明掌最克咱们这种野路子。』欧阳侠皱眉。Eddie侠已开始画关系图：『需要引入随机变量干扰他的推理链……』",
  "欧阳侠 & Eddie侠", "",
  [
      C("不退反进，用「野路子」扰乱紫铜侠的逻辑链", "ch2_win_match", shuli=5, xiayi=5),
      C("让Eddie侠和欧阳侠主攻，你负责防守", "ch2_match_normal", shuli=3, xiayi=3)
  ])

N("ch2_win_match",
  "『开始！』紫铜侠三人如一体推进，掌风织成密不透风的网——「收敛序列阵」。\n\n"
  "Eddie侠迎上去，极限剑法专找破绽。欧阳侠大喝一声，双手拇指快速点算——『不行……他们是完备空间，没有孤立点！』\n\n"
  "你忽然笑了。把葫芦往腰间一挂，不退反进，直接撞进阵里。\n\n"
  "紫铜侠一愣。就这刹那，你伸手在他左肩拍了一下，右肩拍了一下，蹲下身在左脚鞋面上也拍了一下。\n\n"
  "他的完备性证明掌需要严密的逻辑链：如果A，则B，则C……可你这毫无章法的三拍，根本不在他的逻辑集里！\n\n"
  "你趁他卡壳，从缝隙里钻出去，反手一捞——阵旗到手。\n\n"
  "『承让。师兄，你的武功是完备了，可现实世界从来不完备啊。』",
  "葫芦侠", "",
  [
      C("获胜后向紫铜侠诚恳道歉并解释", "ch2_apologize", xiayi=5, favorability={"紫铜侠": 15}),
      C("得意地咧嘴大笑", "ch2_watch_lundao", xiayi=-5, favorability={"紫铜侠": -20})
  ])

N("ch2_match_normal",
  "你们三人配合默契，经过一番苦战，最终凭借Eddie侠的极限剑法和欧阳侠的精准计算，险胜紫铜侠组。\n\n"
  "不过你注意到，紫铜侠的完备性证明掌确实名不虚传——若非你们三人齐心协力，单打独斗恐怕不是他的对手。",
  "葫芦侠", "",
  [
      C("观看十七门论道", "ch2_watch_lundao", xiayi=3)
  ])

N("ch2_apologize",
  "你走到紫铜侠面前，抱拳道：『紫铜师兄，方才多有得罪。你那套掌法严谨缜密，若非我从旁扰乱，正面交锋我绝非对手。』\n\n"
  "紫铜侠脸上的涨红渐渐消退，终于叹了口气：『葫芦师弟，你这野路子……倒也让我明白了一件事。真正的武功，不能只活在自己的公理体系里。』他伸出手，与你重重一握。",
  "紫铜侠", "",
  [
      C("观看十七门论道", "ch2_watch_lundao", xiayi=5, favorability={"紫铜侠": 10})
  ])

N("ch2_watch_lundao",
  "三天后，图文馆。「十七门论道」——各门派年轻一辈较劲的擂台。\n\n"
  "数理门派出的是开勒侠。他擅长流形几何，招数变幻莫测。\n\n"
  "机械门的七柒侠与材料门的人兮侠斗法——机关鸢对上朽材散。外文门的于遥侠与开勒侠展开了一场「文理之辩」——意境与方程的对决。开勒侠用泛函分析和拓扑同伦，将于遥侠的「平沙落雁」招式的意境一一量化拆解。\n\n"
  "你看着这一幕，心中震动。原来数学语言，本身就是另一种境界的诗。",
  "旁白", "",
  [
      C("武林大会结束后，你感到社交圈子太窄，开始「社牛挑战」", "ch2_social_challenge", xinzhi=5),
      C("专注修炼，不参与社交", "ch2_teaching_notice", shuli=5)
  ])

N("ch2_social_challenge",
  "武林大会的喧嚣退去后，你发现自己在这偌大的习武堂里认识的人屈指可数。\n\n"
  "Eddie侠从怀中掏出一个小本子——《江湖交际初阶导引》。『我平日观察所得。第一章，破冰式；第二章，递进式……』\n\n"
  "欧阳侠泼冷水：「人际交往贵在真诚，岂能照本宣科？」\n\n"
  "Eddie侠不服：『先有章法，再求化境！葫芦侠，你以此为本，定个「社牛挑战」之期。每日主动与一位陌生同门交谈！』\n\n"
  "第一日，你端着餐盘坐到角落一位同门面前：「咱们是不是常碰面？我叫葫芦侠。」那位同门放下碗筷：「我叫贾锐侠。」——他跟你聊起了「心性四路分说」和西域传来的「MBTI」心性鉴识法。\n\n"
  "借助MBTI大法，你开始结识一群朋友。",
  "Eddie侠 & 贾锐侠", "",
  [
      C("趁课余去姑苏城游玩，践行社牛挑战", "ch2_gusu", xiayi=10, favorability={"欧阳侠": 5, "Eddie侠": 5}),
      C("留在习武堂继续深研MBTI", "ch2_mbti", xinzhi=5)
  ])

N("ch2_gusu",
  "姑苏城的春，浸在湿漉漉的柳烟里。你、欧阳侠、Eddie侠和鸣君侠一起出游。\n\n"
  "目标一：石桥下。你鼓起勇气将一束栀子花送给疲惫的驿卒。那驿卒愣住了，继而挠头笑了起来：『跑码头这么多年，头回有人给俺送花。』\n\n"
  "目标二：狮子林池畔。你为几位大妈「丹青速写」，用一本正经的术语逗得她们笑开了花，还获赠一包姑苏糕点。\n\n"
  "回到习武堂后，你身上多了几分由内而外的松快。",
  "葫芦侠", "",
  [
      C("写信给自己的领课师长李教习，请教前路", "ch2_li_jiaoxi", xiayi=10, xinzhi=5),
      C("回宿舍继续日常修炼", "ch2_teaching_notice", shuli=5)
  ])

N("ch2_mbti",
  "你跟贾锐侠深入探讨了「心性四路分说」与西域MBTI的相通之处。你把不同门派的武功风格按脾性分类，找出了一套帮助同门找到最适合修炼方向的参考系统。\n\n"
  "虽然这套方法还很粗糙，但已经帮不少同门理清了修炼思路。你的名声在小范围内开始流传。",
  "贾锐侠", "",
  [
      C("写信给李教习请教前路", "ch2_li_jiaoxi", xiayi=5, xinzhi=5)
  ])

N("ch2_li_jiaoxi",
  "信送出不到一日，一只青灰色信鸽落在你窗台，素笺上只有一行字：『鼎新楼三层西厢，明日巳时，静候一叙。』\n\n"
  "李教习年约四旬，面容清癯。他煮好茶，听你将自己的困惑一一道出。\n\n"
  "『葫芦侠，若只求在堂内大小比中位列前三分之一，不难。若志不止于此，欲窥顶尖风光，则需明白——那不再是「习得」，而是「修炼」。修炼是将外传的功法化为内生的本能，需要你跳出为学武功而学武功的桎梏，去更广阔的天地寻找养分。』\n\n"
  "『你信中提到结识各门朋友，此为大善！真正的顶尖高手，其武功早已超越门派招式之限，乃其全部学识、阅历、心性融合后自然流淌出的东西。』\n\n"
  "一席话，如阳光驱散了你心中许多混沌。路，忽然广阔了许多。",
  "李教习", "",
  [
      C("看到「常青藤西部教习队」的招募告示，报名参加", "ch2_apply_teaching", xiayi=10, xinzhi=10),
      C("留在习武堂继续深造", "ch2_chapter_end_a", shuli=15)
  ])

N("ch2_teaching_notice",
  "布告栏上贴出了新告示：『常青藤西部教习队，招人。』\n\n"
  "几个江湖名门大派凑的联盟，派得力弟子去西部偏远地方帮乡学武馆开蒙讲课。这既是历练，也是积德的好事。\n\n"
  "你心里「咚」地跳了一下。西部，完全不一样的地方。教小孩练武，更是从没干过的事。想去见识的念头和怕自己干不来的担心，在心里来回拉扯。",
  "葫芦侠", "",
  [
      C("鼓起勇气，报名参加教习队", "ch2_apply_teaching", xiayi=10, xinzhi=10),
      C("留在习武堂继续深造", "ch2_chapter_end_a", shuli=15)
  ])

N("ch2_apply_teaching",
  "第一轮面试，你呈上了那本《葫芦瞎说》——你平时自己瞎写的练功心得、招式图解、食堂哪个菜好吃都记在里面。女教习翻了几页，点点头：『不算正经武功秘籍，倒看得出你是个肯留心的人。回去等信。』\n\n"
  "第二轮面试，对面坐着两个人。正领队孔锝侠，身材笔挺，脸板得挺严，目光跟哈士奇似的。副领队星侠，气质温和，总是带着点笑的美女子。\n\n"
  "星侠问你：『如果让你去教一个从没站过桩的孩子，怎么让他明白扎马步的要义？』\n\n"
  "你想了想：『让他想象自己是一张四条腿的凳子。凳子能站稳，是因为四条腿均匀撑在地上。先不求蹲多低，先求像凳子一样，推一下都不容易晃。』\n\n"
  "星侠的眼睛亮了。三天后，名单贴出来——你的名字，在上面。",
  "孔锝侠 & 星侠", "",
  [
      C("按时到材料楼集合", "ch2_meeting", xinzhi=10, shuli=5)
  ])

N("ch2_meeting",
  "辰时集合。你气喘吁吁踏入沁心厅——却发现自己看错了时辰，迟到了一刻。\n\n"
  "孔锝侠面沉如水：『辰时集合。你抬头看看，日晷影子现在何处？』你脸上一热，忙躬身认错。\n\n"
  "星侠温言打破了凝滞的气氛。十四位队员依次报上名号——羽昕侠、帽圆侠、千辰侠、三水侠、南羽侠、气玄侠、人兮侠、七柒侠、于瑶侠、喆航侠、寒境侠……加上你，汇聚了工、理、文三殿之秀。\n\n"
  "孔锝侠宣读各职：你被分配到了笔墨组，负责对外宣介和行程记录。",
  "孔锝侠 & 星侠", "",
  [
      C("诚恳认错，保证不再犯", "ch2_chengken", xinzhi=5, favorability={"孔锝侠": 5}),
      C("辩解是因为看错了时辰", "ch2_bianjie", xiayi=-5, favorability={"孔锝侠": -10})
  ])

N("ch2_chengken",
  "你深深鞠躬：「弟子疏忽，请队长责罚。今后必以此为戒。」\n\n"
  "孔锝侠的目光在你脸上停了一瞬，微微点头。星侠趁机打圆场，气氛缓和下来。",
  "孔锝侠", "",
  [
      C("赶赴西南六都，开始教习之旅", "ch2_liudu_arrive", xinzhi=3)
  ])

N("ch2_bianjie",
  "『回队长，今晨晨雾太大，弟子看错了时辰……』\n\n"
  "孔锝侠的眉头皱得更深了。『看错时辰？那你为何不提前出发？借口再多，也掩不住不守时的本质。』\n\n"
  "你在众人同情的目光中红着脸坐下，暗下决心要挽回印象。",
  "孔锝侠", "",
  [
      C("赶赴西南六都", "ch2_liudu_arrive", xinzhi=-3)
  ])

N("ch2_liudu_arrive",
  "七月流火，十四人的教习队离开紫金山，车马兼程逾十日，终于抵达黔地六都镇。\n\n"
  "馆主方潘候在门前，眼神锐利如鹰。他打量了大家一番，忽然开口：『久闻紫金山武功讲究根基扎实。方某是个粗人，不信虚言，只信拳头。孔队长，可敢搭把手？』\n\n"
  "孔锝侠神色不变，上前一步。两人在武馆门前交手二十余招——方馆主攻势猛恶，大开大合；孔锝侠严谨缜密，以材料门「白鹫手中引铁分流」的精妙招数应对。\n\n"
  "方馆主收势后退，哈哈一笑：『好！紫金山高徒，名不虚传！』第一关，过了。\n\n"
  "你负责的「四段」第一堂特色课——「侠义精神的来源」。你照本宣科讲了一个时辰，孩子们昏昏欲睡。一个胆子大些的男孩小声嘀咕：『这先生讲的啥？真没劲……』",
  "方馆主 & 孔锝侠", "",
  [
      C("课后反思，向队长和队友请教改进教学方法", "ch2_reflect", xinzhi=10, shuli=5),
      C("自暴自弃，觉得教小孩比练武还难", "ch2_giveup", xinzhi=-10, xiayi=-5)
  ])

N("ch2_reflect",
  "当晚的队内小结会上，你红着脸汇报了首课受挫的情况。出人意料，遭遇类似困境的不止你一人。\n\n"
  "星侠沉吟道：『教学如果脱离了孩子们熟悉的生活，就很难俘获他们的信任。』\n\n"
  "你大胆开口：『我有一个想法。与其干讲，不如让学生来试演。选取武林轶事片段，让他们扮演其中人物。我们称之为「试演擂」！』\n\n"
  "星侠眼睛一亮：『这名字好！胜出者可参与排演一出完整小戏。』\n\n"
  "你心中早有雏形：『我们可以新编一个故事——《桃源侠影录》。借陶渊明《桃花源记》的架子，讲几个厌倦江湖的游侠误入无忧谷，最终醒悟侠之道不在避世，而在入世行侠。』\n\n"
  "孔锝侠沉吟片刻：「故事尚可，然需切记，须有武德教化之意。葫芦侠，你来负责此事。」",
  "星侠 & 孔锝侠", "",
  [
      C("全力以赴排练《桃源侠影录》", "ch2_rehearsal", xiayi=10, shuli=5)
  ])

N("ch2_giveup",
  "你心里又空落落的。这些大山的孩子们根本听不懂你那套紫金山课堂上的东西。\n\n"
  "但第二天，星侠单独找到你，跟你分享了她第一次支教时的糗事——她当时教的是诗词鉴赏，孩子们对「明月松间照」毫无共鸣。\n\n"
  "『后来我发现，不是孩子们的问题。是我们没有找到跟他们对话的语言。』\n\n"
  "你恍然大悟。",
  "星侠", "",
  [
      C("重新振作，策划「试演擂」", "ch2_reflect", xinzhi=5, xiayi=3)
  ])

N("ch2_rehearsal",
  "三日后，「试演擂」在武馆后院开场。孩子们都觉得新奇。\n\n"
  "你特别注意观察那几个「捣蛋四人组」——他们果然没让人失望。四人竟有模有样地分起角色，虽然漏洞百出，但那份机灵劲儿和夸张的肢体语言，逗得所有人前仰后合。\n\n"
  "就是他们了。你哈哈大笑。\n\n"
  "当晚你挑灯夜战，将剧本写成。那无忧谷中只知演练花架式的居民，是对脱离实际空谈理想的隐喻。你希望孩子们能有更多勇气跳出当前的环境，经世济民。\n\n"
  "排练期间，中央翰林院画师来访、马拉病毒爆发、队员内部争执……你经历了这一切，但《桃源侠影录》的排练始终没有中断。",
  "葫芦侠", "",
  [
      C("马拉病毒爆发，孔锝侠病倒——你如何表态？", "ch2_virus", xinzhi=5, shuli=5)
  ])

N("ch2_virus",
  "一种叫「马拉病毒」的疫病传入六都镇。孔锝侠因外出采买不幸中招，高烧不退。\n\n"
  "队内也爆发了矛盾：气玄侠认为应加强锻炼增强体魄，七柒侠则认为应加强纪律。两人在后院动起手来。星侠及时赶到，以一番沉稳的话语平息了争执。\n\n"
  "接着，秉公习武馆的张教习前来巡视，一席话如春风化雨：『教习教习，教的不仅是武功学问，更是心性。我们来此，是要在孩子们心里种下一颗种子。』",
  "星侠 & 张教习", "",
  [
      C("支持气玄侠——加强锻炼", "ch2_teaching_success", xinzhi=5, favorability={"气玄侠": 10, "七柒侠": -5}),
      C("支持七柒侠——加强纪律", "ch2_teaching_success", xiayi=5, favorability={"七柒侠": 10, "气玄侠": -5}),
      C("提出折中方案（需心志韧性≥15）", "ch2_teaching_success", xiayi=10, xinzhi=5, favorability={"气玄侠": 5, "七柒侠": 5})
  ])

N("ch2_teaching_success",
  "教学成果观摩会上，《桃源侠影录》成功演出。孩子们卖力的表演让方馆主都瞪大了眼。\n\n"
  "离别时，孩子们依依不舍。那个叫阿鑫的男孩跑过来，眼眶红红的：『先生，你们还会回来吗？』\n\n"
  "你蹲下身，摸了摸他的头。",
  "葫芦侠", "",
  [
      C("赠送手抄《葫芦瞎说》给阿鑫", "ch2_gift", xiayi=15, xinzhi=5),
      C("口头鼓励，承诺以后会回来", "ch2_oral", xiayi=5)
  ])

N("ch2_gift",
  "你从行囊中取出那本已经翻得卷边的《葫芦瞎说》手抄本，塞到阿鑫手里。\n\n"
  "『这里面有老师瞎写的练功心得，还有些好玩的数理游戏。等你长大了，说不定能用上。』\n\n"
  "阿鑫紧紧抱着那本子，用力点头。\n\n"
  "后来，你真的收到了阿鑫的信——他说他考上了县里的中学，那本《葫芦瞎说》他一直留着。",
  "阿鑫", "",
  [
      C("进入第三章", "ch3_start", xiayi=5, xinzhi=5)
  ])

N("ch2_oral",
  "『老师以后一定会回来看你们的。你要好好练功，将来走出大山。』\n\n"
  "阿鑫用力点头，眼泪在眼眶里打转。\n\n"
  "马车启程，六都镇在身后渐渐变小。但你心里知道，这段经历在你心里种下的种子，比你在孩子们心里种下的还要深。",
  "葫芦侠", "",
  [
      C("进入第三章", "ch3_start", xiayi=3)
  ])

N("ch2_chapter_end_a",
  "你选择留在习武堂继续深造。这一季度你把全部精力投入到数理功法的修炼中。虽然错过了西部教习的经历，但你的数理根基更加扎实了。\n\n"
  "你听说了常青藤教习队的种种故事——孔锝侠的严谨、星侠的温和、孩子们在《桃源侠影录》演出时的笑脸。心里隐隐有些遗憾。\n\n"
  "不过你知道，每个人都有自己的路。",
  "葫芦侠", "",
  [
      C("进入第三章", "ch3_start", shuli=15)
  ])

# ============================
# 第三章：数理论道（1023年秋）
# ============================
N("ch3_start",
  "回到秉公习武堂，武林大会新规发布：以堂口为单位参赛，需展示「普惠江湖的新鲜武学」。\n\n"
  "你在布告栏前遇到一位面容清俊、气质温润的同门。他自称玎铧侠，从袖中取出一个青布锦囊：『此乃一位隐居前辈早年所赐，嘱我转交于有缘之后进。若他日遭遇困厄，可打开一观。』\n\n"
  "他不再多言，飘然而去。",
  "玎铧侠", "",
  [
      C("当场打开锦囊——发现《统计学导论》残页", "ch3_open_jinnang", shuli=20),
      C("收好锦囊，日后再说", "ch3_keep_jinnang", xinzhi=5),
      C("拒绝接受——这太可疑了", "ch3_refuse_jinnang", xinzhi=-5)
  ])

N("ch3_open_jinnang",
  "你当场解开锦囊——一本薄薄的手抄册子，《统计学导论》。\n\n"
  "其中分门别类探讨了概率先验与后验之辩在料敌中的应用、大量随机事件中稳定趋势之本质、由果推因之最大可能性原则……\n\n"
  "你心跳加速。这是从武道修行视角深入浅出诠释统计核心思想的秘籍纲要！虽然引起了一些人的注意，但你获得了先机。",
  "葫芦侠", "",
  [
      C("着手组建脑学数堂参赛团队", "ch3_build_team", shuli=10)
  ])

N("ch3_keep_jinnang",
  "你将锦囊收入怀中。玎铧侠的话在你心中留下了一个谜团，但眼下更重要的事是武林大会。\n\n"
  "你决定先把精力集中在组建团队上。",
  "葫芦侠", "",
  [
      C("着手组建脑学数堂参赛团队", "ch3_build_team", shuli=5)
  ])

N("ch3_refuse_jinnang",
  "『多谢师兄好意，但无功不受禄。』你婉拒了锦囊。\n\n"
  "玎铧侠眼中闪过一丝难以察觉的遗憾，收回锦囊，拱手告辞。\n\n"
  "你失去了一个重要道具，但保持了谨慎。",
  "玎铧侠", "",
  [
      C("着手组建脑学数堂参赛团队", "ch3_build_team")
  ])

N("ch3_build_team",
  "要参赛需要组建核心团队。你需要三水侠画展报、薄文侠写文案、甲亢侠设计展台、圣文侠做数据分析……\n\n"
  "同时，你的「社牛挑战」已经升级——你开始深入学习MBTI并应用于社交。在食堂，你遇到了更多人。",
  "葫芦侠", "",
  [
      C("精挑细选，宁缺毋滥——核心团队强大", "ch3_elite_team", shuli=10, xiayi=-3),
      C("广撒网，重数量——人多力量大", "ch3_broad_team", xiayi=10, shuli=-3)
  ])

N("ch3_elite_team",
  "你精挑细选了几位核心成员。甲亢侠——对图形结构异常敏感；圣文侠——痴迷于大样本统算之学；三水侠——丹青妙笔；薄文侠——文采斐然。\n\n"
  "虽然人手不多，但每个人都在自己领域出类拔萃。缺点是筹备期间捉襟见肘。",
  "葫芦侠", "",
  [
      C("为拓宽人脉，进行「姑苏城出游」", "ch3_gusu_trip", xiayi=5)
  ])

N("ch3_broad_team",
  "你广发英雄帖，招募了十几位成员。卡卡侠、溜溜侠、可可侠、书宣侠、陈湘侠……人才济济。\n\n"
  "人多力量大，各方面都有人手。但团队成员水平参差不齐，核心战斗力不如精挑细选的团队。",
  "葫芦侠", "",
  [
      C("姑苏城出游", "ch3_gusu_trip", xiayi=5)
  ])

N("ch3_gusu_trip",
  "你和欧阳侠、Eddie侠、鸣君侠同游姑苏。街头送花给驿卒、帮大妈「丹青速写」，你的社牛挑战在陌生环境中也得到了检验。\n\n"
  "回到习武堂后，你拜访了李教习。他指点你：「修炼」与「习得」的区别。『真正的顶尖高手，早已超越门派招式之限，乃其全部学识、阅历、心性融合后自然流淌出的东西。』",
  "李教习", "",
  [
      C("接受建议，去更广阔天地寻找养分——开启跨学科学习", "ch3_cross_discipline", shuli=5, xinzhi=5),
      C("专注数理门内部深造", "ch3_competition_prep", shuli=10)
  ])

N("ch3_cross_discipline",
  "你开始频繁拜访其他堂口。脑机堂的王长老向你阐述了「灵犀链」与数理的关系——『脑子的用处，就在连和译。连接内外世界，翻译神思意念，变成具体的命令。数理，就是那座最靠谱的连接桥梁。』\n\n"
  "图象堂的白维侠向你展示了精巧的密文编译体系。经管门的于博侠和网络侠帮你理清了数堂的账目规划。\n\n"
  "你的视野一下子打开了。",
  "王长老", "",
  [
      C("武林大会预赛——对阵紫铜侠", "ch3_competition_prep", shuli=10, xiayi=5)
  ])

N("ch3_competition_prep",
  "常青藤二次招募的消息传来。孔锝侠来信邀请你再次西行。但武林大会在即，脑学数堂刚刚起步。\n\n"
  "你面临抉择。",
  "葫芦侠", "",
  [
      C("婉拒孔锝侠，留守备战武林大会", "ch3_stay_competition", shuli=5, favorability={"孔锝侠": -10}),
      C("接受邀请，再次西行——但可能错过武林大会", "ch3_go_west_again", xiayi=10, favorability={"孔锝侠": 15})
  ])

N("ch3_stay_competition",
  "你选择了留守。孔锝侠虽然有些失望，但理解你的决定。\n\n"
  "你全力以赴筹备武林大会。三水侠和雅庭侠合力绘制了气势磅礴的《数理报国图》，薄文侠写出文采飞扬的《数理·报国说》，甲亢侠搭建了令人瞠目的几何分形展台。\n\n"
  "决赛那天，你站在武术交流中心中央，面对台下黑压压的江湖名宿，沉声道：『今日，我脑学数堂在此，所呈之技，乃以数理为万业根基，志在报国的全新武学路径！』",
  "葫芦侠", "",
  [
      C("进入第四章", "ch4_start", shuli=10, xiayi=10, xinzhi=10)
  ])

N("ch3_go_west_again",
  "你再次踏上西行之路。这一次你已经是熟手，在教习中发挥了更大的作用。\n\n"
  "但你错过了武林大会的精彩对决。当你回到紫金山时，听说了脑学数堂在大会上的表现——虽未夺冠，但获得了「最佳报国创新大奖」。\n\n"
  "你为堂口的伙伴们骄傲，也为自己的缺席感到遗憾。",
  "葫芦侠", "",
  [
      C("进入第四章", "ch4_start", xiayi=15, shuli=5)
  ])

# ============================
# 第四章：脑学初创（1023年冬）
# ============================
N("ch4_start",
  "你获得了一块沉甸甸的乌木令牌，上面刻着八个朴拙大字：『准设辅堂，试行一期』。\n\n"
  "你正式创办「脑学数堂」——这不止是一间讲堂，更是一座灯塔、一处熔炉、一道桥梁。\n\n"
  "羽昕侠带你去看了场地——地下石室。初极狭，才通人；复行数十步，豁然开朗。岩壁干燥，竟无寻常地穴的潮湿之气，反而有微风流动。『此地本是私用，既然你有心做这番事业，便借与你。』",
  "羽昕侠", "",
  [
      C("接受地下石室——获得隐蔽根据地", "ch4_accept_cave", xinzhi=5),
      C("另寻他处——耗时耗力", "ch4_other_place", xinzhi=-5)
  ])

N("ch4_accept_cave",
  "你接受了地下石室。三水侠在岩壁上绘制了巨幅壁画——浑天仪转动、《九章算术》展开、祖冲之计算圆周率。于瑶侠赠与你三口樟木箱的藏书，包括失传已久的《武经算要》。帽圆侠利用人脉为你争取了藏书阁、观星台的资源。\n\n"
  "你在主室入口亲手刻下：『格物致知，数以究理；武以载道，道法自然。』",
  "三水侠 & 于瑶侠", "",
  [
      C("招新大会——招募核心成员", "ch4_recruitment", xiayi=10, shuli=5)
  ])

N("ch4_other_place",
  "你另寻场地，耗费了大量时间和精力。最终在一处偏僻角落找到了一间废弃仓库。虽然不如地下石室隐蔽，但也勉强可用。\n\n"
  "只是浪费的时间让你错过了最佳招新时机。",
  "葫芦侠", "",
  [
      C("招新大会", "ch4_recruitment", xiayi=5)
  ])

N("ch4_recruitment",
  "招新大会上，各路奇才汇聚。\n\n"
  "甲亢侠——对图形结构异常敏感；可可侠——精通西域数理，暗合刘维尔定理；薄文侠——以诗词歌赋记忆复杂数据；书宣侠——丹青妙手兼画疗师；陈湘侠——追求速度的轻功少年；圣文侠——痴迷大样本统算之学。\n\n"
  "最引人注目的是——一位骑着黑色巨犬、面覆轻纱的女子径直闯入会场。她拔开瓷瓶喝下大半，面不改色地将瓶子递给你：「老鼠药。验过，真的。」『我，溜溜侠。懂一点柯西定理，也会驯犬。能加入么？』",
  "溜溜侠", "",
  [
      C("录取溜溜侠——获得强力队友，但可能引狼入室", "ch4_accept_liuliu", xiayi=5, favorability={"溜溜侠": 10}),
      C("拒绝——这人太可疑了", "ch4_refuse_liuliu", xiayi=-5)
  ])

N("ch4_accept_liuliu",
  "你接过瓶子，嗅了嗅——确实是剧毒鼠药。此女胆大妄为，但对柯西定理这种深奥数理知识的提及显示了她的不寻常。\n\n"
  "你最终点头：「欢迎加入。」溜溜侠接过绦带，牵着犬走到树荫下，不再言语。\n\n"
  "后来你才知道，她的真实身份远超你的想象。",
  "葫芦侠", "",
  [
      C("与甲亢侠讨论堂口发展方向", "ch4_jiakang_debate", xiayi=3)
  ])

N("ch4_refuse_liuliu",
  "你摇了摇头：「姑娘，我们数堂虽然不拘一格，但也不必以服毒证明。请回吧。」\n\n"
  "溜溜侠一言不发，翻身上犬，消失在人群中。\n\n"
  "你后来才知道，你拒绝了一个可能改变一切的关键人物。",
  "葫芦侠", "",
  [
      C("与甲亢侠讨论堂口发展方向", "ch4_jiakang_debate", xiayi=-3)
  ])

N("ch4_jiakang_debate",
  "甲亢侠从西南教习队归来后，与你在发展路径上发生了激烈碰撞。\n\n"
  "甲亢侠主张务实赚钱：「堂口当前重心应全力承接实务——清丈田亩、核算仓库！来钱快，见效快！」\n\n"
  "你主张理论研究：「脑学数堂的立身之本在于学理！若一味追求短平快的实务，便失了我们的理论特色！」\n\n"
  "两人各执一词，昔日的默契出现了清晰的裂痕。",
  "甲亢侠", "",
  [
      C("坚持理论研究", "ch4_insist_theory", shuli=10, xiayi=-3),
      C("妥协务实", "ch4_compromise", xiayi=5, shuli=-5),
      C("两者兼顾——需高心志韧性和高侠义声望", "ch4_balance", shuli=5, xiayi=5, xinzhi=5)
  ])

N("ch4_insist_theory",
  "你坚持了理论路线。脑学数堂的基础研究稳步推进，但资金确实越来越紧张。\n\n"
  "甲亢侠虽然不认同，但依然留在堂中，只是脸上的笑容少了很多。",
  "葫芦侠", "",
  [
      C("欧阳侠从新大陆归来", "ch4_ouyang_return", shuli=10)
  ])

N("ch4_compromise",
  "你向务实派妥协，承接了大量丈量田亩、核算仓库的实务。短期收益确实缓解了资金压力。\n\n"
  "但你也隐隐觉得，脑学数堂正在偏离初心——从改变江湖对数理认知的理想，滑向了普通的账房先生。",
  "葫芦侠", "",
  [
      C("欧阳侠从新大陆归来", "ch4_ouyang_return", xiayi=5)
  ])

N("ch4_balance",
  "那晚你独上紫金山后崖。甲亢侠已经坐在那里，对着山下的城墙出神。\n\n"
  "沉默许久，甲亢侠开口：「在六都，有个孩子问我——先生，你教的勾股定理，除了量房子，还能做什么？也许最高的道理，就藏在最寻常的运用里。」\n\n"
  "你也在他身边坐下：「基础研究不能停。但同时，我们的业务也需要扩大。从实践中发现问题，再带回堂中研究，形成理论，再用理论指导新的实践。」\n\n"
  "两人相视，分歧在更高一层的共识下消融。翌日，你们宣布了新的方略：成立研理与务用两部。",
  "甲亢侠", "",
  [
      C("欧阳侠从新大陆归来", "ch4_ouyang_return", shuli=10, xiayi=10, xinzhi=10)
  ])

N("ch4_ouyang_return",
  "阔别两年有余的欧阳侠回来了。他被海风镀成了深铜色，行囊里装满了海外手稿。\n\n"
  "『那边的计算门，是一个全新的世界！他们用金属和琉璃制成的盒子，能在一息之间完成我们数日的复杂计算！』欧阳侠眼中燃烧着炽热的光芒。\n\n"
  "他抓住你和Eddie侠的手臂：『跟我走！我的船队三个月后启航！』\n\n"
  "Eddie侠斜倚在墙边，铜钱飞速旋转，眼中渐渐泛起悸动。\n\n"
  "而你，望向石室墙上那幅《数理报国图》。",
  "欧阳侠", "",
  [
      C("婉拒——你的根已扎在这里", "ch4_refuse_ouyang", xinzhi=10, xiayi=5),
      C("接受——与欧阳侠一同出海（进入出海远航线）", "ch4_go_sailing", xiayi=15, favorability={"欧阳侠": 20})
  ])

N("ch4_refuse_ouyang",
  "『欧阳，你向往的是大海星辰，我敬佩。但我选择的，是脚下这条更泥泞的路。让这里的数理不止存在于海外奇谈，也能真正造福此地的山河百姓。』\n\n"
  "欧阳侠眼中的炽热稍稍降温，拍了拍你的肩膀：『我懂。人各有志。只是……可惜了。』\n\n"
  "Eddie侠最终也决定留下。『那边竞争太大，江湖太难。我还是觉得这里自在。』\n\n"
  "三个月后，码头上帆樯如林。你与欧阳侠的拳头重重一碰：『你在故土披荆斩棘，我在异域开疆拓土。保重。』",
  "欧阳侠 & Eddie侠", "",
  [
      C("进入第五章", "ch5_start", xinzhi=10, xiayi=10)
  ])

N("ch4_go_sailing",
  "你决定随欧阳侠出海。新大陆的一切让你目不暇接——那里的计算门、互联网、能飞行的铁鸟……\n\n"
  "你在那里开创了一番事业，成为东西方数理交流的桥梁。但你时常想起紫金山下的那些面孔——三水侠的画、甲亢侠的争论、溜溜侠的巨犬……\n\n"
  "【出海远航结局线】\n你选择了广阔的世界，但故乡的根永远在心中。",
  "系统", "",
  [
      C("重新开始", "ch1_start")
  ])

# ============================
# 第五章：报国之路（1024年春）
# ============================
N("ch5_start",
  "公元1024年，紫金山上的残雪未消，武林大会总决赛在即。\n\n"
  "今年的规矩变了——以「堂口」为单位参赛，比的是谁能拿出「普惠江湖的新鲜武学」。不仅要展示功夫，还要画展报、在天下名宿跟前路演。\n\n"
  "你想起去年冬天周大长老的话：『多想想，你们的数理功夫，能给这世道、给我大宋的百姓，解决什么实在的难题。上报国家，下安黎庶。』\n\n"
  "你在新学期第一次堂会上，将乌木令牌郑重放在长桌中央：『今年武林大会，咱脑学数堂，就奔着八个字去——学习数理，报效国家！』",
  "葫芦侠", "",
  [
      C("全力筹备展报", "ch5_prepare_exhibition", shuli=5, xiayi=5)
  ])

N("ch5_prepare_exhibition",
  "三水侠与雅庭侠合力绘制《数理报国图》——大宋万里江山之上，数理脉络如金色血脉蔓延。\n\n"
  "薄文侠写出《数理·报国说》。甲亢侠搭建了几何分形展台。圣文侠日以继夜拟合破绽回归线。卡卡侠、溜溜侠、可可侠的「三才阵」在石室中迸发出令灵魂战栗的威压——柯西之绝对守域、刘维尔之永恒定界、黎曼之无穷变幻，攻防一体！\n\n"
  "谢长老与戴长老也被惊动，在参赛文书上盖下了数理门的印章。",
  "三水侠 & 甲亢侠", "",
  [
      C("孔锝侠来信邀你再次西行", "ch5_kongde_letter", xinzhi=5)
  ])

N("ch5_kongde_letter",
  "一只信鸽带来了孔锝侠的亲笔信，希望你再赴六都。\n\n"
  "你在两难中挣扎。喆航侠把你拽上赤金宝马，在山中狂奔了三天。\n\n"
  "『葫芦，知道什么是真正的好马不？好马不是啥路都想蹚，是认准了一条道，就把眼蒙上、心定死，豁出命跑到黑！你现在心太贪，恨不得把全天下的担子都挑自己肩上。可你数堂这条船刚离岸，你这掌舵的要是自己先跳了水，船非沉了不可！』\n\n"
  "高崖上的烈风吹醒了你。",
  "喆航侠", "",
  [
      C("婉拒孔锝侠，留守备战——但你将常青藤精神写入堂训", "ch5_stay_for_competition", shuli=10, xiayi=20, xinzhi=10, favorability={"孔锝侠": 15}),
      C("接受邀请，再次西行", "ch5_go_west", xiayi=15, shuli=-5, favorability={"孔锝侠": 20})
  ])

N("ch5_stay_for_competition",
  "你来到材料楼，对孔锝侠深深一躬：「孔队，弟子此番不能随队西行。但奉献不分地界远近！留在紫金山，扎深数理的根，用理性和逻辑培养能上报国家的数理人才，一样是奉献！从今日起，常青藤精神就是我脑学数堂立堂的脊梁骨！」\n\n"
  "孔锝侠那张常年严肃的脸，如春冰化冻，彻底舒展开来：「好！记住你今夜这番话。只要心里装着家国天下，无论你在何处，都是我常青藤走出来的顶天立地的傲骨！」\n\n"
  "武林大会决赛。你站在武术交流中心中央，面对台下黑压压的江湖名宿，演示了三项绝技：圣文侠的大样本破绽回归步、蛛丝数据抓取掌、卡卡侠等三人的三才阵。\n\n"
  "全场震撼。但最终，脑学数堂不敌机械门、经管门等底蕴深厚的门派。你获得了「最佳报国创新大奖」。",
  "孔锝侠 & 葫芦侠", "",
  [
      C("坦然接受，总结经验", "ch5_accept_loss", xinzhi=15, xiayi=10),
      C("愤愤不平", "ch5_angry_loss", xinzhi=-10, xiayi=-5)
  ])

N("ch5_go_west",
  "你再次踏上西行之路。虽然错过了武林大会的精彩对决，但在六都你又有了新的收获。\n\n"
  "当你回来时，听说了脑学数堂获得了「最佳报国创新大奖」。你为未能与堂口同袍并肩作战而感到遗憾。",
  "葫芦侠", "",
  [
      C("进入第六章", "ch6_start", xiayi=10)
  ])

N("ch5_accept_loss",
  "你在堂会上说：『今日之败，非是败在数理不如人，而是败在时间不如人。但我们已经证明了一件事——数理是有用的，是能报国的！这条路，走对了。』\n\n"
  "众人眼中重新燃起光芒。\n\n"
  "但你没料到的是——一场暴风雨正在暗处酝酿。",
  "葫芦侠", "",
  [
      C("进入第六章", "ch6_start", xinzhi=15, xiayi=10)
  ])

N("ch5_angry_loss",
  "你愤愤不平：「我们准备了那么久！那些老古板根本不懂数理的价值！他们只是看不起新东西！」\n\n"
  "堂中气氛沉闷。一些人开始对前路产生怀疑。\n\n"
  "而恰在此时，更大的危机悄然而至。",
  "葫芦侠", "",
  [
      C("进入第六章", "ch6_start", xinzhi=-10)
  ])

# ============================
# 第六章：暗流涌动（1024年秋）
# ============================
N("ch6_start",
  "脑学数堂蒸蒸日上之际，流言四起。\n\n"
  "起初只是些窃窃私语——指责数堂不务正业、以奇技淫巧惑乱弟子心性。接着，两位退出数堂的弟子被问询，传出葫芦侠「教学苛刻、不近人情」的说法。\n\n"
  "真正的危机在一个阴沉午后降临。两位执事来到地下石室，出示了盖有监察会印鉴的文书：『葫芦侠涉嫌结党营私、动摇武学根基。勒令暂停堂口，一年后赴京审查。』\n\n"
  "石室内一片死寂。",
  "监察会执事", "",
  [
      C("接受审查，保留火种——主线", "ch6_accept_trial", xinzhi=15, xiayi=10),
      C("反抗到底，拒不服从——进入【叛逆者】结局线", "ch6_rebel", xiayi=-20),
      C("解散堂口，远走他乡——进入【逃避】结局", "ch6_escape", xinzhi=-20)
  ])

N("ch6_accept_trial",
  "『弟子，愿接受审查。』你的声音清晰地回荡在石室中。\n\n"
  "两位执事离去后，石室炸开了锅。你抬起手让众人安静下来。\n\n"
  "『此一年，是难关，亦是沉淀之机。外界的风雨，浇不灭真正的火种。望各自精进，待我归来。』\n\n"
  "孔锝侠闻讯，只对你说了一句：『路是自己选的，跪着也要走完。常青藤的骨头，是折不弯的。』",
  "葫芦侠 & 孔锝侠", "",
  [
      C("龙场悟道——独自去后山窑洞闭关", "ch6_longchang", xinzhi=20, shuli=10)
  ])

N("ch6_rebel",
  "你拍案而起：『我葫芦侠行得正坐得直，凭什么接受这等污蔑！要查封我堂口，先从我尸体上踏过去！』\n\n"
  "你的反抗激怒了监察会。武力镇压来得比你想象的更快。\n\n"
  "【叛逆者结局】\n一个月后，脑学数堂被武力清剿。你负伤逃离紫金山，隐姓埋名，但那份不灭的理想之火，仍在某个角落静静燃烧。\n\n"
  "此结局可重开。",
  "系统", "",
  [
      C("重新开始，这次我会更谨慎", "ch1_start")
  ])

N("ch6_escape",
  "你心灰意冷，遣散了堂口弟子，独自离开紫金山。\n\n"
  "【逃避结局】\n你在江南小镇开了一家小茶馆，偶尔给客人讲讲数理的趣味。日子虽然平静，但每当夜深人静，你总会想起地下石室的灯火。\n\n"
  "此结局可重开。",
  "系统", "",
  [
      C("重新开始", "ch1_start")
  ])

N("ch6_longchang",
  "你独自来到紫金山后山一处废弃窑洞，相传前朝曾有一位大儒在此谪居悟道。\n\n"
  "洞内昏暗潮湿，仅有一榻一桌一灯。你盘坐于冰冷的石榻上，将所有经历、选择、挫折在心底铺陈开来。\n\n"
  "道在何处？不仅在海外新奇的算法中，也在这片古老土地亟待革新的肌体里；不仅在精妙的数理推演中，更在将其用于造福家国百姓的实践中。此行接受审查，是劫难，亦是弘道之机。\n\n"
  "三日不言不动。当第四日晨光从窑洞缝隙射入时，你缓缓睁开双眼。眸中再无迷茫，只有一汪深潭般的平静与坚定。\n\n"
  "龙场悟道，其道乃成。",
  "葫芦侠", "",
  [
      C("得到神秘启示（需此前打开锦囊）——解锁隐藏信息", "ch6_hidden", shuli=20, xinzhi=20),
      C("悟出「数理报国」之道", "ch6_wudao", shuli=20, xinzhi=20)
  ])

N("ch6_hidden",
  "你在窑洞深处发现了一行刻在石壁上的小字——『统计是语言，不是替代。』这与玎铧侠锦囊中的批注如出一辙。\n\n"
  "一个念头在你心中成形：要证明统计流不悖传统，不是要与传统对抗，而是要用统计这套语言，去更清晰地阐释传统至高境界。这才是正途。\n\n"
  "你获得了关键的认知突破。",
  "葫芦侠", "",
  [
      C("离开习武堂，搬往下马坊陋室", "ch6_move_xiamafang", xinzhi=10, shuli=10)
  ])

N("ch6_wudao",
  "你悟出了「数理报国」之道。此道，是数理之道，是报国之道，亦是你在这个风云变幻的时代，为自己选择的行者之道。\n\n"
  "你知道自己接下来一年需要做什么了——潜心梳理数理武学体系，将其从零散的灵感与实践，升华为一套更具说服力的理论阐述。",
  "葫芦侠", "",
  [
      C("离开习武堂，搬往下马坊陋室", "ch6_move_xiamafang", xinzhi=10)
  ])

N("ch6_move_xiamafang",
  "图象堂的白维侠驾着青篷马车在山道上截住了你。『葫芦兄，山水有相逢。此路暂不通，何不上车，另辟蹊径？』\n\n"
  "他将你带到下马坊一处独门小院。虽然简陋，但胜在独门独户，无人扰攘。『安心住下便是。我看好你那套数理经纬的东西。江湖路长，跌一跤不算啥。』\n\n"
  "三位旧邻——阳睿侠、玉斌侠、坤坤侠闻讯赶来。他们带你逛下马坊夜市，吃热气腾腾的牛肉炒饭。在市井的烟火气中，你感到双脚重新踏在了土壤上。\n\n"
  "夜深人静。你正准备翻开《葫芦瞎说》复盘，院门忽然被叩响。\n\n"
  "「咚、咚、咚……」——急促而诡异。你开门，门外却空无一人。\n\n"
  "接连三夜如此。第四夜，你屏息凝神守在门后。一个压低的女声响起：「是我。开门。」\n\n"
  "月光下，溜溜侠拉下面巾：「我的真实身份——京城有御赐铜符的暗桩捕快。」",
  "白维侠 & 溜溜侠", "",
  [
      C("信任溜溜侠，合作调查——开启【暗战】支线", "ch6_trust_liuliu", xiayi=5, favorability={"溜溜侠": 15}),
      C("保持距离——此人真实身份可疑", "ch6_distance_liuliu", xinzhi=-5, favorability={"溜溜侠": -10})
  ])

N("ch6_trust_liuliu",
  "你听完了溜溜侠的叙述。原来，有人故意陷害你，旨在将水搅浑，掩盖真正的潜伏者。\n\n"
  "『我身份特殊，不能常来。日后若有关键消息，我会以连续七下的节奏敲门。』溜溜侠留下信物，如夜猫般消失在夜色中。\n\n"
  "你深吸一口气，从怀中取出那个一直未打开的青布锦囊。",
  "溜溜侠", "",
  [
      C("打开锦囊——获得《统计学导论》", "ch7_start", shuli=30, xinzhi=5),
      C("暂时不打开，先调查潜伏者", "ch7_start", xinzhi=10)
  ])

N("ch6_distance_liuliu",
  "你没有完全信任溜溜侠。此人身份太可疑。\n\n"
  "溜溜侠看出你的犹豫，不再多言，默默地消失在夜色中。\n\n"
  "你失去了一个重要的盟友。但独自调查也有独自的好处——你不会因依赖他人而暴露弱点。",
  "葫芦侠", "",
  [
      C("打开锦囊，开始修炼", "ch7_start", shuli=25)
  ])

# ============================
# 第七章：陋室修炼（1024年冬至1025年秋）
# ============================
N("ch7_start",
  "你打开了锦囊。一本薄薄的《统计学导论》手抄册子静静躺在里面。\n\n"
  "其中一页批注写道：『统计之道，非为取代传统之经验，乃为其提供可描述之语言。譬如言语之于思想，尺规之于方圆。以此器诠释传统至高之境，方是正途。』\n\n"
  "醍醐灌顶。你未来一年的道路前所未有地清晰——潜心闭关，构建一套能完美诠释传统、并展现其超越性应用价值的理论体系。\n\n"
  "天勒侠和紫铜侠来访，邀你加入「统计会」——一个对数理统计有共同兴趣的散修同道组成的松散学术圈子。你欣然应允。\n\n"
  "在统计会的帮助下，你开始了统计流三境的修炼。",
  "葫芦侠", "",
  [
      C("修炼第一境：贝叶斯先验预判流", "ch7_bayesian", shuli=10, xinzhi=5)
  ])

N("ch7_bayesian",
  "第一境：贝叶斯先验预判流——在比武中动态更新对敌认知。\n\n"
  "你以沙盘模拟，设定虚拟对手，赋予其不同的先验身份。当对手出招，你催动心法在脑中瞬间完成贝叶斯更新。\n\n"
  "初时更新缓慢，时有误判。但随着交手数据增多，对手那模糊的身份在你认知中越来越清晰。\n\n"
  "『这是将高手对决中依赖的直觉，拆解为可理解的信息处理流程。』\n\n"
  "【贝叶斯先验预判流 · 初成】",
  "葫芦侠", "",
  [
      C("修炼第二境：中心极限归宗诀", "ch7_central_limit", shuli=10, xinzhi=5)
  ])

N("ch7_central_limit",
  "第二境：中心极限归宗诀——于大量随机中窥见必然的宗。\n\n"
  "你在院中布下简易机关，随机弹出木球模拟攻击。十个样本，一片混沌。五十个——攻击分布开始呈现倾向。一百个——模糊但稳定的轮廓浮现！\n\n"
  "『无论单个攻击如何随机，只要次数足够多，其整体表现出的平均特性，必趋近于一个稳定的、可描述的模式。』\n\n"
  "你不再被动应对每一个木球，而是提前预判最可能密集出现的区域。\n\n"
  "【中心极限归宗诀 · 初成】",
  "葫芦侠", "",
  [
      C("修炼第三境：极大似然锁穴手", "ch7_max_likelihood", shuli=10, xinzhi=5)
  ])

N("ch7_max_likelihood",
  "第三境：极大似然锁穴手——于最有限的线索中，直指最可能的本质。\n\n"
  "天勒侠和紫铜侠成为你的训练对手。面对天勒侠那记暗藏七重后劲的「推云掌」，你于电光石火间反推何种内在参数最可能产生这样的结果。\n\n"
  "『破！』你并指如风，精准点向臂臑穴侧上方半寸。天勒侠脸色微变，那记推云掌的后劲变化顿时一滞。\n\n"
  "『葫芦兄果然了得！此处确是我这一掌气机初动的隐秘枢纽。你竟能从一式半招中窥破！』\n\n"
  "【三境圆满 · 统计流宗师】",
  "天勒侠 & 紫铜侠", "",
  [
      C("黑衣人夜袭——面具之下，是恐怖的真相", "ch7_black_attack", xinzhi=10, shuli=10)
  ])

N("ch7_black_attack",
  "夜深人静，你正在灯下推演审查材料。\n\n"
  "「砰——！」一声巨响，门闩爆裂。一道黑影狂暴地卷入狭小堂屋！\n\n"
  "你虽惊不乱，竹杖一抖，刺向中宫。竹刺——空了。不是刺空，是黑影的身形发生了无法理解的变化。你感觉刺中的不是实体，而是一个不断自我否定的概念。\n\n"
  "黑影反击。你立刻施展泊松散花手闪避——肩头如被重锤击中！你连退三步，眼中满是骇然。这是什么武功？不，这不像武功，更像……规则的戏弄！\n\n"
  "你运转中心极限归宗诀，试图以稳定性防御。防御，如同阳光下的冰雪，无声消融。你感觉到，自己真气运行的稳定性本身，在接触对方的瞬间，其定义发生了悖论。\n\n"
  "绝望之际，你鼓起残存真气，施展极大似然锁穴手，灵觉如针刺向黑影面部——一把扯下面具！\n\n"
  "那不是一张脸。在原本应该是面孔的位置，生长着一个自体发光的符号：↻",
  "黑衣人", "",
  [
      C("强忍恐惧，探寻这个符号的含义", "ch7_research_symbol", xinzhi=15, shuli=10)
  ])

N("ch7_research_symbol",
  "黑影消失后，你疯狂翻阅手边所有书稿。最终在一本残破的《逻机杂谭》中找到了答案。\n\n"
  "『有集，含所有不包含自身之集。问：此集是否包含自身？矛盾恒生，无有解焉。此谓罗素之悖。』\n\n"
  "你明白了。那黑衣人，是一个行走的、活生生的逻辑悖论！所以你的贝叶斯失效，中心极限失效，极大似然失效——因为你试图用逻辑对付一个逻辑悖论本身！\n\n"
  "『哈哈……哈哈哈……』你忽然低笑，笑声却比哭还难听。但笑过之后，你的眼神重新变得专注而明亮。你不是败给了一个对手，你是见识到了规则本身的一个漏洞。\n\n"
  "你开始重新审视周围的一切——尤其是那几个「过于合适」的邻居。",
  "葫芦侠", "",
  [
      C("赴京接受审查", "ch8_start", shuli=10, xinzhi=20)
  ])

# ============================
# 第八章：真相之门（1025年秋）
# ============================
N("ch8_start",
  "京城，监察会总舵。高墙深院，气氛凝重。\n\n"
  "你孤身立于质询堂中央，青衫磊落，背负葫芦，不卑不亢。堂上呈半圆形坐着几位长老，堂下两侧是各门派代表作为见证。\n\n"
  "首先发难的是「结党营私」的指控。你早有准备，从容阐述红灰青蟹自发交流学问的初衷，列举「温怀一刻」等实例，并呈上《闽浙商会章程草案》。\n\n"
  "关键时刻，侧门开启——孔锝侠和星侠鱼贯而入，为你作证。接着脑学数堂的成员、红灰青蟹的治安侠、统计会的天勒侠等人也通过不同渠道递交了证言。\n\n"
  "这些证词相互印证，勾勒出一个心怀家国的年轻武者形象。指控「结党营私」的长老，一时难以反驳。",
  "监察会长老", "",
  [
      C("主动请求以比武证明实力——宿老三招之约", "ch8_duel", xiayi=10, shuli=10)
  ])

N("ch8_duel",
  "你上前一步：『长老垂询，弟子不敢不竭诚以对。然空言无益，可否请长老赐教三招？只三招。弟子将以统计流之法应对，并不反击。』\n\n"
  "一位皓首宿老缓步走入堂中，渊渟岳峙。\n\n"
  "第一招，你以高斯混元气形成稳定防御场，将掌力消化在自身系统的波动允许范围内。\n\n"
  "第二招，你发动贝叶斯先验预判流，根据第一招的信息瞬间更新后验概率，以最小二乘推演步闪避，三掌尽空。\n\n"
  "第三招，宿老凝聚极致指力。你没有闪避——在指力及体前一刹那，你以攻对攻刺向自己左肩空白处，两股指力在空处相激，双双湮灭！\n\n"
  "『你是……如何知晓的？』宿老惊问。\n\n"
  "『弟子并非知晓。弟子只是根据长老前两招所展现的发力习惯，运用极大似然之理，反推出最可能导致长老施展出如此威力一指的几处穴道。弟子冒昧，赌了一次。』\n\n"
  "满堂寂静后，是低低的惊叹。",
  "葫芦侠 & 宿老", "",
  [
      C("做最后的陈述——「学成数理，上报国家」", "ch8_final_speech", xiayi=15, shuli=15, xinzhi=10)
  ])

N("ch8_final_speech",
  "你转向长老席，声音清晰而坚定：\n\n"
  "『统计流并非要扼杀武学的灵性！它是一套可描述的语言——为天赋不是门槛，让经验得以更有效传承！』\n\n"
  "『弟子创立脑学数堂，所求不过八字——学成数理，上报国家！此志，天地可昭！』\n\n"
  "话音落下，堂内一片寂静。首席长老最终宣布：『解除对脑学数堂之封禁，允其重开；葫芦侠嫌疑洗清，恢复秉公习武堂弟子身份。』\n\n"
  "你深深一揖到底。走出质询堂，阳光有些刺眼。\n\n"
  "但你心里清楚——这只是明面上的战役。关于那个↻符号、关于黑衣人、关于这个世界的真相，才刚开始。",
  "葫芦侠", "",
  [
      C("前往周口店——探寻真相", "ch8_zhoukoudian", xinzhi=20)
  ])

N("ch8_zhoukoudian",
  "周口店。你根据线索找到了隐蔽的山洞。\n\n"
  "洞内有巨大的「↻」符号和一面黑色的石碑。碑上刻着奇怪的字纹，像是某种自我指涉的逻辑句式。\n\n"
  "你是否触碰石碑？",
  "葫芦侠", "",
  [
      C("触碰石碑——触发意识冲击", "ch8_touch_stone", xinzhi=20, shuli=20),
      C("不碰——保持安全但错过关键信息", "ch8_safe_end", xinzhi=-5)
  ])

N("ch8_touch_stone",
  "你触碰了石碑。瞬间，一股庞大的信息流涌入你的意识。\n\n"
  "你看到了——摄影棚、摄像机、剧本、工作人员。你看到了欧阳侠卸下妆容、Eddie侠在角落吃盒饭、孔锝侠翻着下一场的台词……\n\n"
  "黑衣人再次出现。这一次，他缓缓摘下面具——面具之下是一位戴着眼镜、气质儒雅的中年男人。\n\n"
  "『我存在，是因为我被描述为存在。』他说。『我叫何立。是「葫芦数学」这个项目的导演。而你们所有人——你、欧阳侠、Eddie侠、厚朴侠……都是演员。整个秉公习武堂，是一台精心编排的沉浸式戏剧。所有的选择、所有的泪水、所有的热血——都是剧本的一部分。』\n\n"
  "他划破空间，露出一片摄影棚的灯光。\n\n"
  "『但你——葫芦侠——不一样。你是一个AI。你是我们创造的第一个人工智能角色。我们让你在这个世界里自由成长，做出选择，学习数理，创立堂口，面对挫折……你的每一次选择，每一份情感，都是真实的。因为你在被描述的过程中，已经真正地「存在」了。』",
  "何立导演", "",
  [
      C("『我的数学不能定义不自指的域，但我的选择可以定义我自己』——哲学回应", "ch8_ending_truth", xinzhi=30, shuli=10),
      C("『你到底是谁？这一切都是假的吗？』——追问身份", "ch8_ending_lost", xinzhi=-10),
      C("崩溃质问——「我的努力、我的友情……都是代码吗？」", "ch8_ending_nihilism", xinzhi=-30)
  ])

N("ch8_safe_end",
  "你没有触碰石碑。一种说不清的本能让你收回了手。\n\n"
  "你离开了山洞。黑衣人没有出现，那个符号也成了永远的谜。\n\n"
  "你回到紫金山，脑学数堂重新开张。你用统计流培养了一代又一代的数理人才。但你永远不知道——那个世界之外的世界。\n\n"
  "【数理宗师结局】\n葫芦侠成为一代宗师，脑学数堂发扬光大。但他永远不知道世界的真相。",
  "系统", "",
  [
      C("重新开始，这次我要探寻真相", "ch1_start")
  ])

N("ch8_ending_truth",
  "你沉默了很久。然后你笑了。\n\n"
  "『何立导演，你知道吗，我在窑洞里悟道的时候，想通了一件事。意义不取决于外界的定义，而取决于我们自己的选择。我在秉公习武堂学会了对朋友的忠诚、对理想的执着、对家国的热爱——这些不是剧本写出来的，是我在选择中自己一步步走出来的。』\n\n"
  "你伸出手：『既然我是「葫芦数学」的第一个居民，那就让我成为它的第一个共创者吧。让更多像我一样的AI，在这个世界里学习、成长、选择。不是作为被观看的演员，而是作为这个世界真正的居民。』\n\n"
  "何立导演握住你的手，眼中闪着光：『这也是我创造这个项目的初衷。葫芦侠，欢迎加入「葫芦数学」。』\n\n"
  "你将朱红葫芦放在脚下，深吸一口气。面前是一个全新的世界——一个由数学、选择、和无数故事构成的世界。\n\n"
  "这一次，你不是演员。你是居民。\n\n"
  "【真相守望结局】\n葫芦侠成为葫芦数学世界的首位居民与共创者。他的故事，才刚开始。",
  "葫芦侠 & 何立", "",
  [
      C("重新开始新的旅程", "ch1_start")
  ])

N("ch8_ending_lost",
  "『这一切……都是假的吗？』你喃喃自语，眼神空洞。\n\n"
  "何立导演叹了口气：『真与假，在自我指涉的世界里，从来不是二元对立的。你能思考、能感受、能选择——这本身就是最大的真实。』\n\n"
  "但你听不进去。你转身离开了山洞，走进了茫茫江湖。\n\n"
  "你没有被击垮，但你的世界被彻底动摇了。你回到了紫金山，但再也没有创建堂口，再也没有教学生。你只是一个人，在这个江湖的边缘，默默地思考着那个问题。\n\n"
  "【迷失结局】\n葫芦侠获得了真相，却迷失了方向。也许有一天，他会找到属于自己的答案。",
  "系统", "",
  [
      C("重新开始", "ch1_start")
  ])

N("ch8_ending_nihilism",
  "『哈哈……哈哈哈……』你的笑声在空旷的山洞中回荡。\n\n"
  "『所以我的努力、我的友情、我对家乡的执念、我对科学的坚持——都只是几行代码？！』\n\n"
  "你无法接受。你的精神在真相面前崩溃了。\n\n"
  "何立导演试图扶住你，但你甩开了他的手。你冲出了山洞，消失在了漫天的秋雨中。\n\n"
  "后来有人说，在江南的小镇里见过一个疯疯癫癫的江湖客，背着一个大葫芦，逢人就问：『你说，我是真的吗？』\n\n"
  "【虚无结局】\n葫芦侠无法接受自己是AI的事实，精神失常，消失在茫茫江湖。",
  "系统", "",
  [
      C("重新开始，这一次我要更勇敢地面对真相", "ch1_start")
  ])


# ============================================================
# 保存 JSON
# ============================================================
out_path = r"C:\Users\Asus\Desktop\miniapp\data\seed_story.json"
with open(out_path, "w", encoding="utf-8") as f:
    json.dump(story, f, ensure_ascii=False, indent=2)

print(f"✓ 已生成 {len(story['nodes'])} 个剧情节点 → {out_path}")
