"매 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 응용
Battle royale narrative.
Gacha: 매 character + rarity.
Class-based combat triangle.
Boss raid: 매 servant 의 mythic scale.
Visual novel: 매 branching.
💻 패턴 (응용)
Class triangle
CLASS_ADVANTAGE={'Saber':['Lancer'],'Lancer':['Archer'],'Archer':['Saber'],'Rider':['Caster'],'Caster':['Assassin'],'Assassin':['Rider'],'Berserker':[],# 매 매 class 의 advantage but takes 2x damage}defdamage_modifier(attacker_class,defender_class):ifdefender_classinCLASS_ADVANTAGE.get(attacker_class,[]):return1.5ifattacker_classinCLASS_ADVANTAGE.get(defender_class,[]):return0.5ifattacker_class=='Berserker':return1.5# 매 매 매 classreturn1.0
Servant data
@dataclassclassServant:true_name:strclass_:strskills:list[str]noble_phantasm:dictparameters:dict# 매 STR/END/AGI/MAG/LCK/NP — 매 E~A++alignment:str
classMaster:def__init__(self):self.command_spells=3defuse_command_spell(self,command):ifself.command_spells==0:raiseNoSpellsError()self.command_spells-=1# 매 absolute order 의 servant 의 force# 매 1: location-jump, 2: instant-restore, 3: kill-self-NPreturnself.servant.execute_absolute(command)
Battle royale logic
defgrail_war_round(masters):alive=[mforminmastersifm.aliveandm.servant.alive]iflen(alive)<=1:returnalive[0]ifaliveelseNone# 매 territorial expansion + alliancesencounters=pair_encounters(alive)form1,m2inencounters:outcome=simulate_combat(m1,m2)ifoutcome=='m1_win':m2.alive=Falseelifoutcome=='m2_win':m1.alive=Falseelse:break_alliance(m1,m2)