"매 combat encounter 의 매력 = 매 player skill 곡선과 challenge 곡선의 일치 (flow channel).". 매 timeline-based scaling 은 encounter 의 시작/중반/끝 phase 별로 enemy 능력을 progress 시키며, 매 player metric (DPS, HP%, time-to-kill) 을 feedback 으로 받아 dynamic 하게 조정. 매 2026 modern AAA (Elden Ring DLC, Helldivers 2) 가 telemetry-driven scaling 채택.
매 핵심
매 scaling axis
Static curve: 매 fixed level → enemy stat lookup table.
Dynamic (DDA): 매 runtime player perf 로 parameter 조정.
Timeline phase: 매 encounter 내부 phase 분할 (intro → escalation → climax).
Hybrid: 매 baseline curve + DDA correction.
매 measurable metric
TTK (time to kill enemy).
TTD (time to death — player).
Damage taken / second.
Resource economy (potions/ammo per minute).
Player retry count.
매 응용
Soulslike boss phase transition: 매 50%/25% HP → new moveset.
Roguelike floor scaling: 매 depth × player level 함수.
classDDAController:def__init__(self,target_ttd=45.0,window=5):self.target=target_ttdself.history=collections.deque(maxlen=window)self.scale=1.0defrecord_death(self,ttd_seconds):self.history.append(ttd_seconds)iflen(self.history)<3:returnavg=sum(self.history)/len(self.history)# too easy → ramp up; too hard → easedelta=(avg-self.target)/self.target# +0.2 = 20% too easyself.scale=clamp(self.scale+delta*0.05,0.7,1.5)defapply(self,enemy):enemy.hp*=self.scaleenemy.dmg*=math.sqrt(self.scale)# damage scales softer
Enrage timer
voidUpdate(){enrageT+=Time.deltaTime;if(enrageT>enrageStart){varf=Mathf.Clamp01((enrageT-enrageStart)/30f);boss.DamageMultiplier=1f+f*4f;// 5x dmg over 30s}}
// damage taken curves softer the lower player HP — "comeback mechanic"floatTakenMultiplier(floathpFrac)=>Mathf.Lerp(1.2f,0.7f,1f-hpFrac);// low HP = less dmg taken