pet_data/docs/EVOLUTION_SYSTEM.md

210 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 進化系統設計文檔
## 現有實現
### 基礎進化機制
目前系統已支援基於**時間 + 屬性條件**的進化:
```javascript
{
stage: 'child',
durationSeconds: 600, // 時間條件:需要 600 秒
conditions: { // 屬性條件:同時滿足
str: 20,
int: 20
}
}
```
### 進化條件檢查
- **時間條件**:寵物年齡 >= durationSeconds
- **屬性條件**:所有指定屬性都要達標
- **邏輯**:時間 AND 屬性 都滿足才進化
## 進化分支系統設計
### 方案 1多分支進化推薦
```javascript
lifecycle: [
{ stage: 'egg', durationSeconds: 0 },
{ stage: 'baby', durationSeconds: 300 },
{
stage: 'child',
durationSeconds: 600,
conditions: { str: 20, int: 20 }
},
// 成年體可以有多種進化路線
{
stage: 'adult_warrior', // 戰士型
durationSeconds: 1200,
conditions: { str: 60, dex: 40 },
priority: 1
},
{
stage: 'adult_mage', // 法師型
durationSeconds: 1200,
conditions: { int: 60, str: 30 },
priority: 2
},
{
stage: 'adult_balanced', // 平衡型
durationSeconds: 1200,
conditions: { str: 50, int: 50, dex: 50 },
priority: 3
},
{
stage: 'adult', // 普通成年(保底)
durationSeconds: 1200,
conditions: {},
priority: 999
}
]
```
**檢查邏輯**
1. 時間到達後,檢查所有同階段的進化選項
2. 按 priority 從小到大檢查
3. 第一個滿足條件的就進化成該階段
### 方案 2樹狀進化圖
```javascript
export const EVOLUTION_TREE = {
tinyTigerCat: {
baby: {
next: ['child'], // 固定進化
conditions: { ageSeconds: 300 }
},
child: {
next: ['warrior', 'mage', 'balanced', 'adult'], // 多選一
conditions: { ageSeconds: 600 },
branches: {
warrior: { str: 60, dex: 40 },
mage: { int: 60, str: 30 },
balanced: { str: 50, int: 50, dex: 50 },
adult: {} // 保底
}
}
}
}
```
### 方案 3觸發式進化
```javascript
{
stage: 'adult_legendary', // 傳說型
trigger: 'special', // 不走正常流程
conditions: {
str: 100,
int: 100,
dex: 100,
destiny: 'lucky_star', // 需要特定命格
deityFavor: 100 // 神明好感滿
}
}
```
## 建議實現
### 第一階段(基礎)
使用**方案 1**,在 `pet-species.js` 中定義多條進化路線:
```javascript
lifecycle: [
{ stage: 'baby', ... },
{ stage: 'child', ... },
{
stage: 'warrior',
branch: 'combat', // 標記分支類型
durationSeconds: 1200,
conditions: { str: 60, dex: 40 },
priority: 1,
description: '力量與速度的化身'
},
{
stage: 'mage',
branch: 'magic',
durationSeconds: 1200,
conditions: { int: 60 },
priority: 2,
description: '智慧的追求者'
},
{
stage: 'adult',
branch: 'normal',
durationSeconds: 1200,
conditions: {},
priority: 999,
description: '普通的成年體'
}
]
```
### 第二階段(進階)
- 添加**超進化**:需要特殊道具或事件觸發
- 添加**退化機制**:照顧不當可能退化
- 添加**命格影響**:特定命格解鎖特殊進化路線
## 實現細節
### 修改 checkStageTransition()
```javascript
checkStageTransition() {
const ageSeconds = this.state.ageSeconds
const currentStage = this.state.stage
// 找出當前階段的所有可能進化
const candidates = this.speciesConfig.lifecycle
.filter(stage =>
stage.durationSeconds > 0 &&
ageSeconds >= stage.durationSeconds &&
stage.stage !== currentStage
)
.sort((a, b) => (a.priority || 999) - (b.priority || 999))
// 檢查第一個滿足條件的
for (const candidate of candidates) {
if (this.checkEvolutionConditions(candidate)) {
this.evolve(candidate.stage)
break
}
}
}
checkEvolutionConditions(stageConfig) {
if (!stageConfig.conditions) return true
const { str, int, dex, ...others } = stageConfig.conditions
if (str && this.state.str < str) return false
if (int && this.state.int < int) return false
if (dex && this.state.dex < dex) return false
// 可擴展:檢查其他條件
return true
}
```
## 數值平衡建議
### 進化時間規劃
- **Egg → Baby**: 5 分鐘300秒
- **Baby → Child**: 6 小時21,900秒
- **Child → Adult**: 3 天281,100秒
### 屬性要求
- **Baby → Child**:
- STR 8, INT 8
- 設計目標6小時內約需餵食 30-40 次,玩耍 60-70 次
- **Child → Adult**:
- STR 50, INT 50, DEX 50
- 設計目標3天內累積需要持續照顧
### 命格影響
- **武曲星**(力量成長+30%)→ 更容易進化成戰士
- **文曲星**(智力成長+40%)→ 更容易進化成法師
- **天乙貴人**(運勢高)→ 可能觸發特殊進化