"매 unit 의 의 hard counter 의 soft counter 의 의 — 의 dominant strategy 의 의 prevent.". RTS / autobattler 의 의 fundamental balance mechanism — StarCraft (1998) 의 marine-vulture-tank triangle 의 origin. 매 2026 의 modern (StarCraft 2, Age of Empires IV, Stormgate) 의 의 hard counter 의 의 soft counter (10-30% damage modifier) + positioning + tech tree 의 의 의 의 layered counter system 의 의.
매 핵심
매 counter 의 의 type
Hard counter: 2-3x damage multiplier, 거의 항상 win (예: marauder vs immortal).
Soft counter: 10-30% advantage, micro 의 의 outplay 의 의 (예: zealot vs marine 의 surround).
Tech counter: late-game unit 의 early unit 의 의 (예: battlecruiser vs marine).
Composition counter: 의 single unit 의 의 army composition 의 의 counter.
매 design 원칙
Transitivity 의 X: A→B→C→A — 의 dominant strategy 의 의.
Asymmetric counter: 매 race / faction 의 의 counter 의 의 의 (variety).
Counter visibility: 매 player 의 의 의 counter 의 의 의 의 (UI tooltip + tutorial).
Cost-effectiveness: counter unit 의 의 cheaper or 의 powerful — 매 reaction 의 의 reward.
# 매 attack type × armor type → multiplierDAMAGE_MATRIX={('pierce','light'):1.5,('pierce','heavy'):0.5,('crush','building'):2.0,('crush','light'):0.8,('melee','light'):1.0,('melee','heavy'):1.2,}defcompute_damage(attack_type,armor_type,base_dmg,armor_value):mult=DAMAGE_MATRIX.get((attack_type,armor_type),1.0)returnmax(1,base_dmg*mult-armor_value)
StarCraft 2-style attribute system
# 매 unit 의 의 attribute (Light/Armored/Biological/Mechanical/Massive/Psionic)classUnit:name:strattributes:set[str]hp:intarmor:intclassWeapon:base_damage:intbonus:dict[str,int]# +damage vs attributedefdamage_against(self,target:Unit)->int:bonus=sum(bforattr,binself.bonus.items()ifattrintarget.attributes)returnmax(0,self.base_damage+bonus-target.armor)# 예: Marauder = +10 vs Armoredmarauder_weapon=Weapon(base_damage=10,bonus={'Armored':10})
Soft counter via positioning (range / micro)
# 매 ranged 의 의 melee 의 의 soft counter — 의 micro 의 의 kitedefkite_dps(unit_range,target_speed,unit_speed,weapon_dps):ifunit_speed<=target_speed:returnweapon_dps*0.3# caught# kite efficiency — range 의 의 의 의 의 의efficiency=min(1.0,unit_range/5.0)returnweapon_dps*efficiency
Counter graph validation (no transitive dominator)
importnetworkxasnxdefhas_dominant(counters:dict[str,list[str]])->bool:"""Check if any unit hard-counters all others (cycle-free dominator)."""G=nx.DiGraph()forunit,beatsincounters.items():forbinbeats:G.add_edge(unit,b)# 매 unit 의 의 의 의 의 unit 의 의 — out_degree == n-1n=len(counters)returnany(G.out_degree(u)==n-1foruinG.nodes)# 매 healthy: cyclic — A>B>C>Acounters={'marine':['zealot'],'zealot':['zergling'],'zergling':['marine']}assertnothas_dominant(counters)
Composition score (army-vs-army)
defcomposition_score(army_a:list[Unit],army_b:list[Unit])->float:"""매 simulate matchup 의 의 expected value."""score=0.0foruainarmy_a:# 매 ua 의 의 best target in army_bbest_dmg=max(ua.weapon.damage_against(ub)forubinarmy_b)score+=best_dmg*ua.attack_speedreturnscore
TFT-style trait synergy (autobattler)
TRAITS={'Mage':{3:1.3,6:1.6,9:2.0},# spell power multiplier'Bruiser':{2:100,4:250,6:500},# bonus HP}defactive_traits(team:list[Unit])->dict[str,int]:counts={}foruinteam:fortinu.traits:counts[t]=counts.get(t,0)+1# 매 threshold 의 의 의 의 active tierreturn{t:max([kforkinTRAITS[t]ifk<=c],default=0)fort,cincounts.items()}
매 결정 기준
상황
Approach
Classic RTS (clear roles)
Hard counter triangle (rock-paper-scissors)
Skill-expressive RTS
Soft counter + positioning + micro
Autobattler
Trait synergy + composition counter
MOBA
Counter pick at draft + lane matchup
Tower defense
Damage type × armor type matrix
New game prototyping
Start hard counter → playtest → soften
기본값: 매 2-3 hard counter relations + soft counter (positioning, range, speed) layered.
🔗 Graph
🤖 LLM 활용
언제: counter matrix prototyping, balance proposal generation, transitivity validation script.
언제 X: actual playtesting (의 telemetry + human playtester 의 의 의), competitive meta analysis (의 dataset 의 의).
❌ 안티패턴
Hard counter only: 매 game 의 의 rock-paper-scissors 의 의 — skill expression 의 의.
Hidden counter: tooltip 의 의 — player 의 의 reverse-engineer 의.
Dominant unit: 의 unit 의 의 의 unit 의 hard counter — meta 의 collapse.
No counter at all (homogeneous units): 매 player choice 의 의 의 의 의 의.
Symmetric mirror only: 매 race / faction 의 의 의 — variety 의 의.
🧪 검증 / 중복
Verified (StarCraft 2 design talks, AoE IV balance patches, Riot Games TFT design).