「道在屎溺,亦在爐火。方寸之間,自有仙門。」
一句話定位 + 五個賣點 + 五個不做
方寸仙門是一款桌寵 idle 修仙遊戲。Electron 透明置頂視窗,弟子住在玩家桌面上,當玩家做別的事時(寫程式、看影片、滑手機),宗門自動運轉 — 採集、煉化、突破、飛升、升界。
五界 / 弟子 / 配方 / 道學 / 飛升 / 自動化 / 天機 / 潮汐 / quest / 設計鐵律
rateMul = buildingLevelMul × additiveBaseline × (1 + discipleMultBonus) × affinityCoef × realmMul| # | 鐵律 | 出處 | 落地 |
|---|---|---|---|
| 1 | ♾️ 永不重置 | M0 vision | 飛升 / 升界只疊加 |
| 2 | ⚖️ 雙軸對等 | M62 | 公式落地,弟子首次接入生產 |
| 3 | ✖️ 多倍率源 ≥ 4 | NUMBERS_DESIGN | 14 系統 dep graph |
| 4 | ⚡ 快推進派 | M60-M72 | 第一突破 ≤ 2 min |
| 5 | 🔓 漸進解鎖 | M18 / M28 | 14 系統按需出場 |
| 6 | 👁️ 三層數值體驗 | M27 | Visceral / Cognitive / Strategic |
| 7 | ⏱️ 8 反饋頻率 | NUMBERS_DESIGN | 100ms / 1s / 5s / 30s / 1m / 5m / 30m / 4h |
| 8 | ⏰ 掛機 vs 主動 0.30-0.50 | NUMBERS_DESIGN | 24h 掛 ≈ 玩 12-15h |
| 9 | 🚫 不引入 prestige | BALANCE_DESIGN §10 | 飛升 ≠ reset |
| 10 | 🛡️ 不讓建築歸零 | BALANCE_DESIGN §10 | additiveBaseline ≥ 1.0 |
| 11 | 🎴 不做 FOMO UP 池 | M0 v0.6 | 所有弟子永久可抽 |
| 12 | 🎁 失敗即收穫 | TUTORIAL philosophy | 突破失敗 +5% 永久 |
| 13 | ↩️ 永遠可以回頭 | TUTORIAL | 早期沒不可逆 |
| 14 | 💎 進度永不消失 | TUTORIAL | 殘影 / 仙骨 / 仙史閣 |
| 15 | 💡 卡關有提示 | TUTORIAL | 24h 無變化 → 啟示 buff |
| 16 | 🐉 桌寵情感連結 | TUTORIAL | 想念 / 主動找你 / 裝扮 |
| 頻率 | 應有反饋 |
|---|---|
| 100 ms | 數字微跳 |
| 1 sec | 主要倍率變化 |
| 5 sec | 至少 1 個資源 +1 visible |
| 30 sec | tooltip 提示「下個目標還差 X」 |
| 1 min | toast「達成 Y」 |
| 5 min | 解鎖新升級或新 tier |
| 30 min | 解鎖新系統 OR 第 1 飛升 |
| 4 h | meaningful new build / new strategy |
每頻率「sub-target」缺了,玩家就覺得 dead time 太長 → 棄。
| 時段 | 圖示 | 應達成 | 數量級 |
|---|---|---|---|
| 0-5 min | 🌱 | 第 1 弟子招募 + 第 1 殿堂 + ×10 spirit_qi | 1e2 |
| 5-15 min | 🌿 | 5 弟子 + 自動化解鎖 + 第 1 突破 | 1e3 |
| 15-30 min | ⚪ | 第 1 飛升 + 殘影 / 升界解鎖 | 1e5 |
| 30 min - 1 h | 👶 | 主要倍率 ×10^3-10^6 | 1e6 |
| 1-4 h | 🌟 | 第 2-3 飛升 / 大部分 14 系統解鎖 | 1e9 |
| 4-24 h | ⚡ | 倍率 ×10^9-10^15 / 道學 advanced | 1e15 |
| 1-7 day | ☁️ | 倍率 ×10^20+ / 多次飛升 + 跨界 | 1e30 |
| 7-30 day | ✨ | 倍率 ×10^50+ / 全成就追逐 | 1e75 |
| 30+ day | ☯️ | 倍率 ×10^100+ / Steam EA 留存 | 1e150 |
設計目標:讓「沒玩過放置」的人在 5 分鐘內入坑、30 分鐘前不退、7 天內第一次飛升。
| 時段 | 動作清單 |
|---|---|
| 0-5 分 | ☐ 1. 點桌寵 10 下,累積 10 靈氣 ☐ 2. 解鎖並建造「聚靈殿 Lv.1」 ☐ 3. 分派第一位弟子「青衫」到聚靈殿 |
| 5-15 分 | ☐ 4. 聚靈殿升到 Lv.3,解鎖「採藥圃」 ☐ 5. 建造採藥圃並分派弟子 ☐ 6. 累積 5 株靈芝,開啟乾坤袋 ☐ 7. 累積 30 靈氣,解鎖「煉丹房」 |
| 15-30 分 | ☐ 8. 煉出第一顆「凝氣丹」 ☐ 9. 把凝氣丹餵給「青衫」(心通) ☐ 10. 累積 100 靈氣,招募第 2 名弟子 ☐ 11-12. 招募第 3 名弟子,分派 |
| 30-60 分 | ☐ 13. 解鎖第 4 座殿堂「製符閣」(消耗 200 靈氣) ☐ 14. 解鎖第 5 座殿堂「丹爐房」 ☐ 15. 道學樹研第一條「靈氣感應」(全產出 +10%) ☐ 16. 立第一條自動化規則(用預設模板) ☐ 17. 聚靈殿升到 Lv.10,觸發第一次蛻變 |
第一小時結束時,你應該有 5 座殿堂 · 3 名弟子 · 1 條道學 · 1 條自動化規則 · 約 500 靈氣 + 50 靈石
天地之初,混沌一炁。一炁分而為陰陽,陰陽錯而為五行,五行紊而生萬類。萬類各有其數,而數之上者,謂之「道」。
仙者,人字旁加山 — 是把人放到山裡,而不是把人練成刀。這是一個關於「目送」的故事。
| 流派 | 圖示 | 哲學三層 | 對應殿堂 | 科技點 |
|---|---|---|---|---|
| 劍道 | ⚔️ | 意、心、形 | 煉器房 | 劍道點 |
| 丹道 | ⚗️ | 生、煉、化 | 煉丹房 | 丹道點 |
| 符道 | 📜 | 文、印、咒 | 製符堂 | 符道點 |
| 陣道 | 🔯 | 布、合、解 | 陣法堂 | 陣道點 |
| 體修 | 🥋 | 凡、骨、不朽 | 採集殿堂 | 體修點 |
| 太初 | ☯️ | 混沌、虛無、歸真 | 太初殿堂(飛升 ×3 後) | 太初點 |
五行單 5 + 五行雙 10 + 罕見三靈 3 + 天靈根 1 + 異靈根 30 = 49 完整池
| 境界 | 圖示 | 每段 9 重 | 每重 cost | realmMul |
|---|---|---|---|---|
| 鍊體 | 🌱 | 9 重 cultivation 1e2 - 9e2 | +1.5×/重 | 1.5^0 = 1 |
| 築基 | 🌿 | 9 重 1e3 - 9e3 | +1.5×/重 | 1.5^1 = 1.5 |
| 金丹 | ⚪ | 9 重 1e5 - 9e5 | +1.5×/重 | 1.5^2 = 2.25 |
| 元嬰 | 👶 | 9 重 1e7 - 9e7 | +1.5×/重 | 1.5^3 = 3.375 |
| 化神 | 🌟 | 9 重 1e10 - 9e10 | +1.5×/重 | 1.5^4 = 5.0625 |
| 渡劫 | ⚡ | 9 重 1e14 - 9e14 | +1.5×/重 | 1.5^5 = 7.59 |
| 飛升 | ☁️ | 9 重 1e20 - 9e20 | +1.5×/重 | 1.5^6 = 11.39 |
| 位置 | 圖示 | 用途 | 上限 |
|---|---|---|---|
| 主力陣容 | 🥇 | 可分派 12 殿堂工作 | 起手 5 → 滿 12(隨宗門等級) |
| 後備庫(弘修堂) | 🥈 | 不工作,自動修煉 30% 速率 | 無上限 |
| 仙史閣 | 🥉 | 已送走 / 飛升弟子,永久紀念 + 仙影附身 | 無上限 |
切換主力 ↔ 後備:1 小時冷卻。主力位擴張:1-10 散修 5 / 11-30 凡品 6 / 31-50 三流 7 / 51-70 二流 8 / 71-100 一流 10 / 升仙界後 12。
每段 9 重 = 63 段。突破 cost 1e2 / 1e4 / 1e6 / 1e9 / 1e13 / 1e18 / 1e25 (M65 大幅下修)。realmMul = 1.5^REALM_INDEX。
派別深度由 M62 / M67 / M68 三個 milestone 構成,形成單卡 affinity → 道學 bonus → 同建築 stacking 的層次系統。
| Tier | 圖示 | 用途 | 範例 | durationSec | 配方比 |
|---|---|---|---|---|---|
| T0 | 🌿 | 採集 | 靈芝 / 凡鐵 / 木材 | 3-5s | — |
| T1 | ⚙️ | 基礎鍛料 | 鐵錠 / 玉粉 / 桃木板 | 15s | 8 |
| T2 | 🪨 | 進階煉材 | 玄鐵 / 凝丹石 / 靈丹 | 30s | 12 |
| T3 | 🗡️ | 三品法器 / 丹 | 三品飛劍 / 三品丹 | 60s | 18 |
| T4 | ⚔️ | 一品法器 | 一品飛劍 / 一品丹 / 靈寶 | 300s | 30 |
| T5-T7 | ✨ | 仙界 / 神界材料 | 仙鐵 / 神磁 / 真神精 | 900-5400s | 50-100 |
| T8-T9 | 🌌 | 真神 / 道境至寶 | 道果 / 混沌晶 | 12000-30000s | 100-1000 |
| 類別 | 殿堂 | baseRate | 用途 |
|---|---|---|---|
| 🌾 gather | 靈田 | 0.5 | 早期主產 |
| ⛏️ gather | 靈礦 | 0.4 | 早期礦物 |
| 💧 gather | 採露亭 | 0.2 | sect_lv 5 後 |
| 🔥 process | 煉爐 | 0.15 | 早期加工 |
| 💎 process | 玉煉房 | 0.12 | 中早期 |
| 🪵 process | 木工坊 | 0.18 | start 建築 |
| 📜 craft | 製符堂 | 0.08 | sect_lv 10 |
| ⚗️ craft | 煉丹房 | 0.10 | start craft |
| ⚔️ craft | 煉器房 | 0.04 | sect_lv 15,高價值慢節奏 |
| 🔯 craft | 陣法堂 | 0.05 | sect_lv 20 |
| 📚 research | 藏書閣 | 0.15 | 道學入口 |
| 📦 storage | 倉庫 | 1.0 | 功能性 |
致敬《星際工業國》的雙階段成本 + 多種點互鎖。200 條 MVP + 後續每界 +30 條 = 完整 ~300 條。
觸發:弟子達化神境 + 渡劫 9 重。保留與重置 — 殘影 = prestige 的浪漫名,代表「曾經走過的路,都會化作未來的光」。
每次飛升從池抽 1-3 種殘影。永不重置、永遠強化下一輪。
餘 38 種包含 攻擊向 / 採集向 / 防禦向 / lore-flavor 等多種類別,5000 連保底「傳奇殘影」獨家。
cosmicMul ladder · 升界不是 reset,是擴展 — 凡界殿堂繼續運轉,新界內容疊加在上。
| 池 | 俗稱 | 單抽 | 主階占比 |
|---|---|---|---|
| ① 凡品池 | 草階 | 1 令 | 凡品 50% |
| ② 精英池 | 玄階 | 10 令 | 精英 50% |
| ③ 天才池 | 地階 | 100 令 | 天才 50% |
| ④ 仙才池 | 天階 | 1,000 令 | 仙才 50% |
| ⑤ 道祖池 | 仙階 | 10,000 令 | 道祖 55% |
| ⑥ 真神池 ★ | 神階 | 100,000 令 | 真神 60% |
| ⑦ 太初池 ★ | 道階 | 1,000,000 令 | 太初 70% |
15 機制由 M8 (1-7) + M9 (8-15) 分批 ship。每機制獨立 flag,預設全 false(M18 漸進解鎖)。
| # | 機制 | 圖示 | 觸發條件 | 效果 | 解鎖階段 |
|---|---|---|---|---|---|
| 1 | Auto Assign | 📌 | 有未填 slot + 未分派弟子 | 按 scoreDiscipleForBuilding 自動分派最佳弟子 | 5 弟子後 |
| 2 | Auto Breakthrough | ⚡ | cultivation ≥ threshold | 自動推突破,失敗則 retry | 1 次突破後 |
| 3 | Auto Recipe Queue | 📋 | 配方完成後 slot 空 | 從預設 queue 自動 pop 下一個 | 3 配方後 |
| 4 | Auto Rules(DSL) | 📐 | 玩家定義 IF-THEN | 規則執行 + cycle detection(Kahn 拓撲排序) | 10 配方後 |
| 5 | Auto Byproducts | ♻️ | T4+ 配方完成,5% 機率 | 自動收集副產物(法器精華) | T4 解鎖後 |
| 6 | Auto Quality | 🔄 | 詞綴不理想 | 消耗詞綴卷自動重洗 | T3 詞綴系統 |
| 7 | Auto Research | 📚 | 道學點足 | 按玩家 autoResearchPriority 自動點 | 道學樹解鎖 |
| 8 | Auto Teleport | 🪄 | 跨界資源不平衡 | 自動傳送資源到主界 | 升仙界後 |
| 9 | Auto Refine | ✨ | 法器在精煉爐 | 自動精煉至下一階,失敗則 retry | 煉器房 Lv.20 |
| 10 | Auto Dispatch | 📨 | 有閒置弟子 + 可用秘境 | 自動派 stat 匹配的弟子去秘境 | 秘境解鎖 |
| 11 | Auto Priority Chain | 🔗 | 配方鏈瓶頸偵測 | 反推前置配方,自動加 queue | 15 配方後 |
| 12 | Synergy(被動) | 🤝 | 鄰接 / 同源 / 食物鏈 | 每 25 級觸發 ×10 milestone | 3 殿堂後 |
| 13 | Proficiency Milestone | 🎯 | 配方熟練度 100/1000/10000 | 自動 ×1.5 / ×3 / ×6 buff | 始終啟用 |
| 14 | Batch Upgrade | 📈 | UI button | 一鍵升殿堂 X 級 | 始終可用 |
| 15 | Efficiency Breakdown | 📊 | UI 分析面板 | 顯示產出來源 / 瓶頸 / 建議 | 始終可用 |
idlePilotEnabled 一個 master toggle,預設 ON。啟用時統一覆寫 7 個關鍵 auto-*(assign / breakthrough / recruit / build / upgrade / research / ascend),做保守決策:
Why:桌寵 idle 遊戲核心契約是「掛機 = 有進步」。M78 之前所有 auto-* default false,新玩家裝完不開主視窗永遠卡 stage 1。
| 子系統 | 圖示 | 機率 | 觸發頻率 | 效果 | pity 保底 |
|---|---|---|---|---|---|
| 赤光 | 🔴 | 30%(主) | ~4 分 | 雙倍產出 1 分鐘 | 10 次無觸發 → 100% 觸發 |
| 紫雲 | 🟣 | 5%(稀有) | ~30 分 | 「悟道機緣」道具 / 場景變紫霧 / 開全屏特效 | 20 次無觸發 → 必出 |
| 玄火 | 🟠 | 15% | ~6 分 | 暴擊加工 ×10(下次配方) | 15 次無觸發 → 必出 |
| 白霜 | ⚪ | 10% | ~10 分 | 凍結時間 30 秒,無消耗繼續產 | 20 次無觸發 → 必出 |
| 黃泉 | ⚫ | 8%(壞 buff) | ~12 分 | 產率 ×0.5 持續 5 分鐘,完成後 ×3 補償 1 分鐘 | — |
| 青鸞 | 🦅 | 3%(罕見) | ~30 分 | 神獸出沒,給隨機 buff(全弟子 +10 屬性 1 hour) | 50 次無觸發 → 必出 |
| 朱雀 | 🔥 | 2%(罕見) | ~50 分 | 全殿堂升級一級(無 cost) | 100 次無觸發 → 必出 |
| 黑曜 | ⬛ | 1%(極罕) | ~100 分 | 吃任一 active buff 翻倍效果與時長 | 200 次無觸發 → 必出 |
8 套相互疊加可做「全套天機暴走」秒殺事件 — 玩家為下一次撞臉繼續開遊戲。
| 时辰 | 時間 | 圖示 | 玩家狀態 | buff / 效果 |
|---|---|---|---|---|
| 子時 | 23-1 | 🌃 | 睡覺 | 特殊事件機率 ×3(夜半天機) |
| 丑時 | 1-3 | 🌙 | 深眠 | 離線收益 ×1.2(夜露) |
| 寅時 | 3-5 | 🐅 | 深眠 | 體修弟子 +10% 修為 |
| 卯時 | 5-7 | 🐰 | 剛醒 | 採集殿堂 ×1.2(晨採) |
| 辰時 | 7-9 | 🌅 | 上班路上 | 靈氣 ×1.5(早潮) |
| 巳時 | 9-11 | 🐍 | 工作中 | 研究殿堂 ×1.3(晨思) |
| 午時 | 11-13 | ☀️ | 午休 | 全產率 ×1.3(午潮) |
| 未時 | 13-15 | 🐑 | 下午班 | 煉丹房 ×1.4(火日烹丹) |
| 申時 | 15-17 | 🐒 | 下午班 | 製符堂 ×1.4(申猴靈動) |
| 酉時 | 17-19 | 🌆 | 下班 | 羈絆值 +10%(社交時段) |
| 戌時 | 19-21 | 🌃 | 主力時段 | 「夜修」全產率 ×1.5 |
| 亥時 | 21-23 | 🐗 | 睡前 | 突破成功率 +10%(夜深心靜) |
潮汐 FOMO:每天 2-3 個 30 分鐘高產時段(辰 / 午 / 戌)。不是限定登入,是「錯過就少賺」。
M74 ship · 88 任務跨 stage 0-7(平均 10-12 / stage)。任務 = 教學實操驗證(M60 step 完成 → 觸發對應 quest)。每 stage 2-3 個 ⭐ 里程碑必做、其他可選。
避免「我都不知道在幹嘛了」的核心策略 — 永不重置承諾 + 桌寵擬人化問候 + 重點提示縮短 + 長期目標看板。
師尊您回來了。
您離開了 1 天 8 小時。
弟子們累積靈氣:124 萬
陳青松完成了 2 次小突破。
發生了 1 次紫雲事件,代您收下了。
[領取並繼續] [檢視詳情]
主動敘述「發生了什麼」,而不只是冷冰冰的數字。
「師尊,您回來了。山門 7 日無人主持,弟子們已自行修煉。」自動播放這 7 天 3-5 個關鍵事件。
模組層 · 狀態 · tick 引擎 · IPC · 存檔 · 測試 · 開發流程
| 層 | 圖示 | 技術 | 版本 | 角色 |
|---|---|---|---|---|
| Runtime | 🖥️ | Electron | 31 | 跨平台桌面 + 透明視窗 |
| Build | ⚡ | electron-vite | 2 | dev HMR + 三 entry 打包 |
| Language | 📘 | TypeScript strict | 5.4 | noUncheckedIndexedAccess 全開 |
| UI | ⚛️ | React | 18 | 主管理面板 |
| Canvas | 🎨 | PixiJS | 8 | 桌寵動畫 + 粒子特效 |
| State | 🐻 | Zustand | 4.5 | sect store + 5 sub |
| 數字 | ♾️ | break_eternity.js | 1.4 | BigNumber,後期 ×10^150+ |
| i18n | 🌐 | i18next + react-i18next | 26 / 17 | zh-TW / zh-CN / en |
| 音效 | 🔊 | Howler.js | 2.2 | BGM + SFX |
| RNG | 🎲 | seedrandom | 3 | seeded,存檔保 replay |
| 測試 | ✅ | Vitest + fast-check | 2 / 3 | 單元 + property |
| E2E | 🎭 | Playwright(Electron) | — | smoke + screenshot |
| 發行 | 📦 | electron-builder | 25 | mac dmg / win nsis / linux AppImage |
| 套件 | 📦 | npm | 11 | package-lock.json 為準 |
src/
├── 🖥️ main/ Electron 主行程 — windows / IPC / tray / save manager
├── 🌉 preload/ contextBridge — renderer 唯一對 main 的入口
├── ⚛️ renderer/ React UI + PixiJS canvas + 14 系統頁
│ ├── components/ 共用元件
│ ├── views/ 14 系統頁
│ ├── progression/ 階段性 UI(PerformanceModal / NumberDisplay)
│ └── styles/ theme.css(M75-M78 美術線維護)
├── 🧮 core/ 純函數遊戲邏輯(無 store 副作用)
│ ├── bignumber.ts
│ ├── production-loop.ts 生產 tick 主迴圈
│ ├── auto-*.ts 9 個自動化機制
│ ├── disciple/ bonus-calc / recruitment / ascension / stacking
│ ├── building/ 升級 / 升級節點
│ ├── dao/ research / 230 節點
│ ├── realm/ 境界 / 升界
│ ├── balance/ simulator / player-profile / auto-playtest
│ ├── fortune/ 天機 8 子系統
│ ├── seasonal/ 季節事件
│ ├── tide/ 12 时辰潮汐
│ ├── local-social/ 弟子羈絆 + 6 NPC
│ ├── mystic-realm/ 秘境派遣
│ └── tribulation/ 天劫戰鬥
├── 📋 data/ 純資料常數(無 logic)
├── 🐻 store/ Zustand state(sect + 5 sub)
├── 💾 save-system/ 持久化 + cloud stub
├── 🤝 shared/ type 共用
├── 🌐 i18n/locales/ 3 語
└── 📊 telemetry/ PostHog / Mixpanel stub
data → core → store → renderer
↑
save-system
↑
shared (types only)
main ←→ preload (via contextBridge) → renderer
main → save-system (directly, FS access)
core/ 絕不依賴 store/ 或 renderer/,所有遊戲邏輯都是純函數,輸入 state → 輸出新 state。讓 simulator 可無 UI 跑 1000 小時模擬。
interface SectState {
// === 資源 ===
inventory: Record<ItemId, string> // BigNumber 序列化為 string
// === 弟子 ===
disciples: Record<DiscipleId, Disciple>
recruitCounts: Record<Rank, number> // 5 階各買過幾次
bonds: Record<BondId, number> // 羈絆強度
// === 建築 ===
buildings: Record<BuildingId, BuildingState>
// BuildingState = { level, slots: SlotAssignment[] }
// SlotAssignment = { recipeId, discipleId, progress, recipeQueue }
// === 道學 ===
unlockedNodes: NodeId[]
daoPoints: Record<DaoBranch, string> // 6 流派各自累計
researchedTechs: TechId[]
activeEchoes: ActiveEcho[] // 飛升殘影 啟用槽
// === 境界 / 飛升 ===
realm: 'mortal' | 'immortal' | 'divine' | 'true_divine' | 'dao'
realmAscensionAt: number | null
ascendedCount: number
ascensionRecords: AscensionRecord[]
ascensionPoints: number // 仙緣點(M43)
ascensionShopPurchases: Record<ShopItemId, number>
// === 自動化 — 11 個 auto-* flag(全 false default)===
autoAssignEnabled: boolean
autoBreakthroughEnabled: boolean
autoResearchEnabled: boolean
autoRulesEnabled: boolean
autoByproductsEnabled: boolean
autoQualityEnabled: boolean
autoRecipeQueueEnabled: boolean
autoTeleportEnabled: boolean
autoRefineEnabled: boolean
autoDispatchEnabled: boolean
autoPriorityChainEnabled: boolean
autoRules: AutoRule[]
autoResearchPriority: DaoBranch[]
// === M79 新增(規劃中)===
idlePilotEnabled: boolean // master toggle, default true
lastIdlePilotTickAt: number | null // 節流計時
// === 天機 / 季節 / 秘境 / NPC ===
fortune: FortuneState
seasonalState: SeasonalState
mysticRealmDispatches: MysticRealmDispatch[]
equipmentRefinement: Record<ItemId, RefinementState>
teleportTransfers: TeleportTransfer[]
discipleDispatch: Record<DiscipleId, DispatchState>
// === 其他增益 ===
recipeProficiency: Record<RecipeId, number>
synergyEnhancements: Record<SynergyKind, number>
spawnedPetIds: PetId[] // 桌寵狀態
// === Meta ===
rngSeed: string // 進存檔保 replay
lastTickAt: number // wall clock
timeSpeed: 1 | 2 | 4 | 8 // v1.0.6 時間流速
ftueCompleted: boolean
unlockedAchievementIds: AchievementId[]
eventLog: EventLogEntry[]
notificationMode: 'ambient' | 'silent' | 'dnd24h'
notificationBadgeCount: number
pendingOfflineReport: OfflineReport | null
}
Zustand subscribe 用 === 比較,Decimal 實例每次 tick 新建會誤判 dirty 觸發 re-render。
解法:
// UI subscribe 時取 .toString() 字串比較
const power = useSectStore(s => s.power.toString())
// 真要算的時候才 bn(power).mul(...)
store 存的數字以 .toJSON() string 形式存,渲染時不轉 Decimal,只在 calculation hot path 才 bn(...) 包回。
// useSectStore.tick(deltaSec) action
tick(deltaSec) {
const state = get()
const rng = createSeededRng(state.rngSeed)
// 1. production-loop tick(主生產)
const afterProduction = productionLoopTick(state, deltaSec, rng)
// 2. M79 idle pilot tick(若 idlePilotEnabled)
const afterIdlePilot = applyIdlePilotTick(afterProduction, rng, elapsedSec)
// 3. autoRules / autoByproducts 等獨立 auto- 邏輯
const afterAutos = applyAutos(afterIdlePilot, rng)
// 4. fortune / seasonal / tide tick
const afterMeta = tickMetaSystems(afterAutos, deltaSec, rng)
// 5. 提交
set(afterMeta)
}
rateMultiplier =
buildingLevelMul // UPGRADE_RATE_MULTIPLIER^(level-1)
× additiveBaseline // 1.0 + max(0,(avgAttr-20)/100) × 0.5
× (1 + discipleMultBonus) // cultivation + category attr + 靈根
× affinityMatchCoef // 1.5 主派 / 1.2 副派 / 0.8 不匹配
× realmMultiplier // 1.5^REALM_INDEX (M62 verdict v2)
additiveBaseline = 1.0,建築獨立可跑safeMul clamp 到 [0.01, 1e9] 防運算溢出requestAnimationFrame → 邏輯 tick 固定 100msfangcun-sect + sub-store keys| 視窗 | 圖示 | 大小 | 透明 | 置頂 | 用途 |
|---|---|---|---|---|---|
| 桌寵視窗 | 🐉 | 350×350 | ✅ | ✅(動態) | 主桌寵 PixiJS 渲染,點擊穿透 |
| 主管理視窗 | 📋 | 1024×720 resizable | ❌ | ❌ | 14 系統頁 / Settings / Quest |
| tutorial overlay | 🎓 | 全螢幕透明 | ✅ | ✅ | M60 教學 spotlight |
// 桌寵預設「穿透模式」
petWindow.setIgnoreMouseEvents(true, { forward: true })
// 滑鼠進入 hitbox → forward 事件偵測 → 切「互動模式」
petWindow.setIgnoreMouseEvents(false)
// 離開 hitbox 0.5 秒後 → 切回穿透
Renderer 永遠用 window.api.* 而非 ipcRenderer(contextIsolation: true + nodeIntegration: false)。
| 命名空間 | 方法 | 用途 |
|---|---|---|
| save.* | read() | 讀取當前 active slot |
write(data) | 寫入當前 active slot | |
list() | 列出所有 3 個 slot + metadata | |
setActiveSlot(id) | 切換 active slot | |
readSlot(id) / writeSlot(id, data, meta) | 讀寫指定 slot | |
renameSlot(id, name) | 重命名 slot | |
exportSlot(id) | 匯出 JSON 文字 | |
importSlot(id, json, name?) | 匯入 JSON(size cap 防 OOM) | |
getCloudStatus() | 查雲端同步狀態(stub) | |
| window.* | openMain() | 開主管理視窗 |
hideMain() | 隱藏主視窗(桌寵恢復 alwaysOnTop) | |
dragMain(x,y) | 拖移主視窗(無 frame 自訂 dragbar) | |
onWindowStateChange(cb) | 監聽視窗狀態變化 | |
| settings.* | read() | 讀 settings(語言/音量/主題) |
write(settings) | 寫 settings(debounce 500ms) | |
| pet.* | setSize(w,h) | 桌寵視窗大小 |
setPosition(x,y) | 桌寵視窗位置 | |
show() / hide() | 顯示/隱藏桌寵 | |
setAlwaysOnTop(bool) | 動態切置頂(主視窗顯示時 false) |
v0.x baseline
→ migrate_v0_6_secondary_dao // M62 自動算 secondaryDao
→ migrate_v0_7_dao_node_reorder // M67 道學節點重排
→ migrate_v0_8_stacking_bonus_field // M68 stacking bonus 新欄位
→ migrate_v0_9_quest_store_init // M74 quest store 預設值
→ v1.0 ship time(2026-05-11)凍結
→ migrate_v1_0_to_v1_1_affinity // 派別匹配係數
→ migrate_v1_1_breakthrough_cost // M65 突破 cost 下修
→ migrate_v1_1_cosmic_mul // M65 cosmicMul ladder
→ migrate_v1_1_to_v1_2_idle_pilot // M79 idlePilotEnabled + lastIdlePilotTickAt
→ v1.2 (M79 規劃中)
每個 migration idempotent + 保留未知欄位(轉發給下個 migration)。重跑同 save 結果完全一致。Migration runner 在 src/save-system/migrations.ts 內 chain 順序執行。
M61 / M66 ship · 4 個 player profile × 240 分鐘無 UI 模擬,verify anchors。
| 指標 | 上限 |
|---|---|
| Idle FPS | 60(active)/ 30(背景) |
| Tick 邏輯耗時 | < 16ms P95 |
| 主視窗冷啟動 | < 3 秒 |
| 24 小時 stress test | RAM 不漏 + tick rate 不退化 |
| 存檔大小(100h 後) | < 500KB |
| Pixi sprite 總數 | < 200(突破/飛升瞬間 < 500) |
| 層級 | 工具 | 範圍 | coverage 目標 |
|---|---|---|---|
| 🔬 Unit | Vitest | core / data / store | lines 80% / functions 80% / branches 70% |
| 🎲 Property | fast-check | RNG 分布 / Decimal 序列化 / formula invariants | 關鍵 invariant 4-6 個 |
| 🔗 Integration | Vitest + happy-dom | renderer components | UI 不強求 |
| 🎭 E2E smoke | Playwright Electron | 啟動 → save → reload → quit | 0 crash |
當前 168 test files,M79 +22 case + happy-dom 補裝後 5 個假性綠燈會真實跑。
openspec/changes/M<n>-<name>/
├── proposal.md 為什麼 / 改什麼 / 商業價值 / 範圍 / 不動
├── design.md 技術方案 + Step 1-N 程式碼骨架 + MUST NOT
├── specs/<area>.md GIVEN/WHEN/THEN + SHALL/MUST NOT
└── tasks.md Done When 1:1 對應
setIgnoreMouseEvents(true, { forward: true }) 在 Win11 + 部分 Intel GPU 上 forward 事件會延遲或掉screen.getCursorScreenPoint() 每 50ms 輪詢,主動切 setIgnoreMouseEvents(CPU < 0.5%)backgroundMaterial: 'none'steam_appid.txt 寫 480(Spacewar)initSteam() try/catch 退化為 offline modeSTEAM_DISABLED=1 跑 fully offlinetype DecimalValue = { d: Decimal; s: string }s 字串.dApplication 設 backgroundAlpha: 0, antialias: falseminFPS: 30, maxFPS: 60,沒互動降到 30ParticleContainerapp.ticker.stop()const { scaleFactor } = screen.getPrimaryDisplay()pixiApp.renderer.resolution = window.devicePixelRatiodisplay-added / display-removed / display-metrics-changed.map() 渲染整 listreact-window 或 @tanstack/react-virtualisSteamInBigPictureMode() 或讀全螢幕 foreground processpackage-lock.json(除非任務本身是改 deps).env*(環境變數檔)docs/BALANCE_DESIGN.md 與 docs/RELEASE_NOTES_v*.md(權威 + 已 ship 紀錄)docs/ARCHITECTURE.md / docs/GAME_DESIGN.md(改動只增不大規模重寫)主框架設計_v*.md / 細節/*.md / 設計文檔說明.md(歷史 / 參考層)CODEX指揮編排計畫_v1.mdopenspec/changes/*/proposal.md.css 檔additiveBaseline = 1.0)兩條 Claude Code session 並行運作 · 邏輯線主導 · 美術線 implementation arm
2026-05-13 同一天 repo 發生過三次撞車:
| 線 | 機器 | git author | 角色 |
|---|---|---|---|
| 🧠 邏輯線(主導) | 新 MacBook Air | 佐峰王 | docs / spec / core / store / data |
| 🎨 美術線 | 舊 Mac mini | 賭賭魚AI | css / theme / token / asset |
src/renderer/styles/*.csstheme.css token 系統src/renderer/components/*.tsx(只動 className / 結構微調)src/i18n/locales/*.json UI textsrc/data/assets-manifest.tsdocs/ 內任何文件openspec/changes/M*/ 非美術 milestonesrc/core/ 業務邏輯src/store/ state / reducersrc/data/ 非 assetsAGENTS.md / CLAUDE.md / PROGRESS.md| Type | 用途 | 例 |
|---|---|---|
feat(M<n>) | 新 milestone | feat(M79): idle pilot spec |
feat(ui) | 美術整體調整 | feat(ui): M75-M78 ink-wash theme |
fix(M<n>) | bug 修(milestone 範圍) | fix(M74): quest i18n locales |
chore(docs) | 文件對齊 | chore(docs): align SoT to v1.1 |
docs | 新 doc / 大幅補 | docs: add ARCHITECTURE.md |
refactor | 不改行為,改結構 | refactor: split sect.ts |
revert | 撤銷 | revert: undo ff4781d |
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
cd <repo>
git fetch origin main
git log --oneline HEAD..origin/main # 看對方推了什麼
git log --oneline origin/main..HEAD # 看我已 commit 沒 push 的
git status --short # 看 working tree
M0 - M79 全進度概覽
npm run auto-playtest idle profiles 0/16 PASS(applyIdleDecisions() 真空殼)。optimal profiles 16/16 PASS,作為 v1.1.0 驗收主軸。M79 修這條。
QuestPointShop / QuestListModal / SettingsModal-reset / ConfirmDialog / QuestTracker — 用 @vitest-environment happy-dom 但 happy-dom 沒裝。M79 順手補。
| 系統 | 已 ship | 剩下 |
|---|---|---|
| 📖 M37 主線敘事 | scaffold | 5 章劇情 + Boss dialog tree(6000+ 字) |
| 🎁 M43 AscensionShop | slice 仙緣點 + 飛升譜 | 真內容 + Logbook view |
| 🏆 M50 排行榜 | 賽季 + 12 AI | 階段目標面板 / 賽季結算獎勵 |
| 👥 M47 本地社交 | 6 NPC 資料 | 滾動訊息流 / 私信 / 賽季 NPC tick |
| 🗺️ M48 秘境 | 5 秘境資料 | dispatch action / RNG event chains |
| ⚡ M49 天劫 | 4 天劫資料 | battle 結算 / dice / 結算 modal |
| ☁️ M55 雲端存檔 v2 | stub | Steam Cloud / iCloud / WebDAV |
| 📊 M58 遙測 | stub | PostHog / Mixpanel 整合 |
| 🎮 M60 Steam 發布 | 延後 | electron-builder Steam Pipeline + 上架 |
2026-05-13 M80 Ship-Readiness Audit Iter2(96/100)· 17 位專家 · 16 條 OVERTURN · 2026-05-14 使用者全 review · 15 採納 / 1 不採納
整體 ship-readiness 57%(weighted 17 experts)。Critical Path 11 週(2026-05-13 → EA 2026-07-29)。Pre-Ship Budget $28,500 - $52,000 USD(中等 $43k)。Day-1 wishlist target 7,000+,Day-1 銷量預期 840 套 / $6,290 收入。
17 專家視角:🎮 Game Design(75%)/ 🏗️ Tech(82%)/ 🎨 Art(65%)/ 🖥️ UI/UX(78%)/ ⚖️ Balance(70%)/ ✅ QA(65%)/ 🔁 Live Ops(55%)/ 🔊 Audio(30% 最弱)/ 🌐 i18n(50%)/ 📦 DevOps(45%)/ 📣 Marketing(25% 最弱)/ ⚖️ Legal(35%)/ 🚀 Performance(60%)/ 💼 Business(40%)/ 🎯 Competitive · 🔒 Security(70%)/ 🤖 Community(15%)。
passive-only(不驗 anchor)/ auto-pilot-no-tut(主驗)/ auto-pilot-with-tut / optimal。「idle 0/16 FAIL」變「passive-only 不驗 anchor」概念清晰。| # | 提案 | 圖示 | 核心 | timing |
|---|---|---|---|---|
| 3 | game UI emoji → SVG icon set | 🎨 | 60-80 icons,跨平台一致 + 可調色。預算 $200(noun project) ~ $3,200(外包) | ship 前完 |
| 3B | Steam capsule「水墨 + 朱砂印章」辨識色 | 🎨 | 主視覺加朱砂紅印章「方寸仙門」+ 桌寵立繪,留白 60%。Small capsule 100×40 仍可辨識 | W-6 trailer 前 |
| 4 | 14 系統頁 → 6 主面板 + drawer | 🖥️ | 🏠 宗門 / 🧘 弟子 / 🏯 殿堂 / 📿 道學 / 🤖 自動化 / 🔮 天機。認知負擔 -50% | EA 後 v1.2(ship 前優先 a11y) |
| 6 | Beta 30 → 100 人 × 4 週 | ✅ | 100 retention 樣本 + 30 人深度訪談。Reddit 50 + 巴哈 30 + Twitter 20。$0-2k 廣告費 | W-7 ~ W-3 |
| 9 | EN_GLOSSARY.md 命名約定 | 🌐 | 120+ 修真 idiom 對譯(修真=Daoist cultivation / 殘影=Echo of Departed / 仙骨=Immortal Essence) | W-4(i18n 前提) |
| 11 | 價格 EA $9.99 -25% / 1.0 $14.99 / 不收 DLC | 📣 | EA 首發 $7.49,Day-1 後 $9.99。1.0 $14.99 + 永不收 DLC(永不重置哲學延伸) | Steam Pipe 設 |
| 14 | EA 路線(不直接 1.0) | 💼 | 現狀 M37/M43/M48/M49/M50 都 scaffold。EA 玩家寬容度高 + Steam 推薦欄目 + 持續 patch 收入 | 確定 |
| 16 | save 不加密接受可看 JSON | 🔒 | Electron asar 5 min 可破。Settings 加「編輯器模式」toggle + 作弊 achievement。L2 HMAC 列 P1 polish | Anti-cheat 注定失敗 |
不採納 — 仍簽 macOS。理由:$99/年 投資 vs 損失 ~20% Mac 用戶。Mac 玩家 ARPU 比 Win 高 ~30%,每年潛在損失 ~$500+。$99 / 年值得。
| 類別 | 項目 | min | mid | max |
|---|---|---|---|---|
| 🔊 Audio | BGM 14 條(1+12+1)+ 36 SFX + 12 時辰 ambient + mix + 授權 | 5,080 | 5,980 | 7,100 |
| 🎨 Art | App icon + Steam capsule 5 種 + 截圖 + Trailer + SVG icon | 5,200 | 10,000 | 19,700 |
| 📦 Steam + Mac sign | Steam Partner $100 + Apple Developer $99/年(Mac build) EV Cert($400)Steam-only 不需要,省 | 199 | 199 | 199 |
| 🌐 i18n | en 母語潤稿 + 文化適配 | 1,500 | 2,000 | 3,000 |
| 📣 Marketing | Twitter / Reddit / YouTube ads × 8 週 | 2,500 | 4,000 | 8,000 |
| ✅ Beta | 100 人招募 + 廣告 | 0 | 1,000 | 2,000 |
| ⚖️ Legal | 律師 review 隱私 + EULA | 0 | 500 | 1,500 |
| 🛠 Sentry / Discord | crash report + bot 3 月 | 0 | 190 | 400 |
| 💼 Contingency | 15% buffer | 2,275 | 3,469 | 6,212 |
| Pre-Ship 小計 | $17,104 | $27,888 | $48,911 | |
| 💻 自家時薪 | 11 週 × 40h × $35 | 15,400 | 15,400 | 15,400 |
| GRAND TOTAL | $32,504 | $43,288 | $64,311 | |
不算開發者自家時薪:$17-49k USD。需要 7-10k wishlist 才能 sustainable(12 個月個人 runway 含生活費 +$30k = $73k total)。
| Wishlist | D-1 銷量 | 30 天累積 | 12 月累積 | 淨收入 | 盈虧 |
|---|---|---|---|---|---|
| 2,000 | 240 | 500 | 1,300 | $6,812 | 🔴 -$36k loss |
| 5,000 | 600 | 1,250 | 3,500 | $18,340 | 🟠 -$25k loss |
| 7,000(目標) | 840 | 1,750 | 5,000 | $26,200 | 🟡 break-even |
| 10,000 | 1,200 | 2,500 | 7,500 | $39,300 | 🟢 +$15k profit |
| 30,000 | 3,600 | 7,500 | 25,000 | $130,750 | 🟢 +$87k profit |
SoT 階層 · 從新到舊 · 從綜合到細節