---
id: wiki-2026-0508-fate-war
title: Fate War
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Fate War game, Fate franchise war, Type-Moon Holy Grail War]
duplicate_of: none
source_trust_level: B
confidence_score: 0.85
verification_status: applied
tags: [game, fate, type-moon, holy-grail-war, narrative, gacha]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
  language: Game / Narrative
  applicable_to: [Game Design, Narrative AI, Lore]
---

# Fate War (Holy Grail War)

## 매 한 줄
> **"매 Type-Moon Fate franchise 의 core conflict — 매 7 master + 7 servant 의 Holy Grail 의 의 의 battle royale"**. Fate/stay night (2004) 시작 — 매 Visual Novel + 매 anime + 매 Fate/Grand Order (gacha) 등 expand. 매 narrative AI / 매 game design 의 reference.

## 매 핵심

### 매 setup
- **7 masters** (mages) + **7 servants** (heroic spirits).
- **Holy Grail**: 매 wish-granting.
- **Fuyuki city** (or variant) 의 setting.
- **Battle royale**: 매 last 1 의 wins.

### 매 7 servant class
- **Saber**: 매 sword.
- **Archer**: 매 bow / range.
- **Lancer**: 매 spear.
- **Rider**: 매 mount.
- **Caster**: 매 magic.
- **Berserker**: 매 mad enhancement.
- **Assassin**: 매 stealth.

### 매 Fate franchise
- **Fate/stay night** (2004): 매 origin VN.
- **Fate/Zero** (2011): 매 prequel.
- **Fate/Apocrypha**: 매 14-servant variant.
- **Fate/Grand Order** (2015+): 매 mobile gacha — 매 commercial 매 다수.
- **Fate/Extra**: 매 Moon Cell variant.

### 매 narrative pattern
- **Master-servant bond**: 매 strategic + emotional.
- **Class triangle**: 매 rock-paper-scissors style.
- **Heroic spirit**: 매 historical / mythological figure.
- **Noble Phantasm**: 매 servant 의 ultimate.
- **Command Spell**: 매 master 의 3-use control.

### 매 game design 응용
1. **Battle royale narrative**.
2. **Gacha**: 매 character + rarity.
3. **Class-based combat triangle**.
4. **Boss raid**: 매 servant 의 mythic scale.
5. **Visual novel**: 매 branching.

## 💻 패턴 (응용)

### Class triangle
```python
CLASS_ADVANTAGE = {
    'Saber': ['Lancer'],
    'Lancer': ['Archer'],
    'Archer': ['Saber'],
    'Rider': ['Caster'],
    'Caster': ['Assassin'],
    'Assassin': ['Rider'],
    'Berserker': [],  # 매 매 class 의 advantage but takes 2x damage
}

def damage_modifier(attacker_class, defender_class):
    if defender_class in CLASS_ADVANTAGE.get(attacker_class, []): return 1.5
    if attacker_class in CLASS_ADVANTAGE.get(defender_class, []): return 0.5
    if attacker_class == 'Berserker': return 1.5  # 매 매 매 class
    return 1.0
```

### Servant data
```python
@dataclass
class Servant:
    true_name: str
    class_: str
    skills: list[str]
    noble_phantasm: dict
    parameters: dict  # 매 STR/END/AGI/MAG/LCK/NP — 매 E~A++
    alignment: str
```

### Noble Phantasm trigger
```python
def noble_phantasm(servant, master_mp, charge):
    if charge < servant.np.threshold:
        return 'insufficient_charge'
    if not master_mp.has(servant.np.cost):
        return 'mp_drain_master'
    return execute(servant.np)
```

### Command Spell (3-use)
```python
class Master:
    def __init__(self):
        self.command_spells = 3
    
    def use_command_spell(self, command):
        if self.command_spells == 0: raise NoSpellsError()
        self.command_spells -= 1
        # 매 absolute order 의 servant 의 force
        # 매 1: location-jump, 2: instant-restore, 3: kill-self-NP
        return self.servant.execute_absolute(command)
```

### Battle royale logic
```python
def grail_war_round(masters):
    alive = [m for m in masters if m.alive and m.servant.alive]
    if len(alive) <= 1: return alive[0] if alive else None
    
    # 매 territorial expansion + alliances
    encounters = pair_encounters(alive)
    for m1, m2 in encounters:
        outcome = simulate_combat(m1, m2)
        if outcome == 'm1_win': m2.alive = False
        elif outcome == 'm2_win': m1.alive = False
        else: break_alliance(m1, m2)
```

### Visual novel branching (Ren'Py-like)
```
label crossroads:
    "Saber waits for orders."
    menu:
        "Engage Lancer":
            jump engage_lancer
        "Retreat":
            jump retreat_route
        "Attempt alliance":
            jump alliance_route
```

### Gacha rarity (Fate/GO-style)
```python
RARITY_RATES = {1: 0.40, 2: 0.30, 3: 0.20, 4: 0.07, 5: 0.03}

def gacha_pull(rates=RARITY_RATES):
    r = random.random(); cum = 0
    for rarity, rate in sorted(rates.items()):
        cum += rate
        if r <= cum: return draw_servant(rarity)
```

### Heroic spirit lore (LLM-aided)
```python
def generate_servant(historical_figure, class_):
    prompt = f"""Design a Fate-style servant.

Historical figure: {historical_figure}
Class: {class_}

Output JSON:
- true_name
- class
- 3 skills (with grade)
- noble_phantasm (name, type, effect, rank)
- parameters (STR/END/AGI/MAG/LCK)
- one-line summary"""
    return llm.generate(prompt)
```

## 매 결정 기준 (응용)
| 상황 | Approach |
|---|---|
| Battle royale game | 매 alliances + 매 reduction |
| Class system | Triangle |
| Mobile gacha | Tiered rarity + pity |
| Narrative game | VN branching |
| LLM character | Heroic spirit gen |

**기본값**: 매 lore-rich character + 매 class triangle + 매 multi-route narrative + 매 (mobile) gacha pity.

## 🔗 Graph
- 부모: [[Game-Design]]
- 변형: [[Gacha]]
- 응용: [[Drama Management Systems]] · [[Computational_Creativity|Computational-Creativity]]

## 🤖 LLM 활용
**언제**: 매 narrative-rich game. 매 character generation. 매 lore wiki.
**언제 X**: 매 actual Fate IP licensing 의 strict.

## ❌ 안티패턴
- **No class differentiation**: 매 strategic depth lose.
- **Pure RNG gacha**: 매 burn-out.
- **No Noble Phantasm uniqueness**: 매 character bland.

## 🧪 검증 / 중복
- Verified (Type-Moon official, Fate wiki).
- 신뢰도 B.

## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — Fate framework + 매 game design 응용 code |
