Files
2nd/10_Wiki/Topic_General/Game_Design/Anti-Air-and-Anti-Ground-Combat.md
T
Antigravity Agent 9148c358d0 docs(10_Wiki): 위키 전체 재구성 — Topic_* 폴더를 4개 카테고리로 통합 + 대규모 중복 제거
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를
Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류.

- 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로
  자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거,
  동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거.
- 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming,
  Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business,
  Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로,
  나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는
  title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백).
  원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지.
- 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서.
- 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는
  지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지.
- Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경.
- 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
2026-07-05 00:33:48 +09:00

171 lines
6.7 KiB
Markdown
Raw 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.
---
id: wiki-2026-0508-anti-air-and-anti-ground-combat
title: Anti-Air and Anti-Ground Combat
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [AA-AG Combat, Multi-Domain Targeting, Air Defense Mechanics]
duplicate_of: none
source_trust_level: B
confidence_score: 0.85
verification_status: applied
tags: [game-design, rts, combat, anti-air, anti-ground, targeting, weapons]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
language: design-doc
framework: rts-combat-system
---
# Anti-Air and Anti-Ground Combat
## 매 한 줄
> **"매 unit 의 의 의 의 의 air vs ground separately classified — 매 hard counter 의 design lever"**. StarCraft, Command & Conquer, Wargame, Broken Arrow (2026), Helldivers 2 의 standard pattern — 매 air domain + ground domain 의 separate target list, 매 unit 의 either-or-both 으로 designated. 매 hard rock-paper-scissors 의 player 가 의 의 composition diversity 를 강제.
## 매 핵심
### 매 targeting matrix
| Attacker can hit | Air | Ground |
|---|---|---|
| Air-only (AA) | ✅ | ❌ |
| Ground-only (AG) | ❌ | ✅ |
| Both (AA+AG) | ✅ | ✅ |
| Neither (passive) | ❌ | ❌ |
### 매 design rationale
- **Composition diversity** — 매 single unit-type spam 의 의 의 의 의 의 hard counter 가 의 의 emerging.
- **Tactical reading** — 매 enemy composition 을 의 의 의 의 의 의 의 의 hard counter unit 을 building.
- **Spatial layering** — 매 air domain 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 ground 와 의 의 의 separate dance.
### 매 weapon parameter
- **AA range vs AG range** — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 separate.
- **AA DPS vs AG DPS** — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 separate (e.g., Hydralisk: high DPS vs both).
- **AA leading shot** — 매 의 의 의 의 의 의 의 projectile travel time + 의 의 의 의 의 의 의 의 의 의 fast aerial unit 의 의 의 의 의 leading 필요.
- **Splash air vs splash ground** — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 separate.
### 매 응용
1. StarCraft Marines (AA+AG) vs Hydralisks (AA+AG) 의 textbook.
2. Wargame Red Dragon 의 IR vs radar SAM 의 layered AA.
3. Broken Arrow 의 modern realistic AA umbrella.
## 💻 패턴
### Targeting Capability Flag
```python
class WeaponSystem:
def __init__(self, name, ag_dmg=0, aa_dmg=0, ag_range=0, aa_range=0):
self.name = name
self.ag_dmg = ag_dmg
self.aa_dmg = aa_dmg
self.ag_range = ag_range
self.aa_range = aa_range
def can_hit(self, target):
if target.domain == "air" and self.aa_dmg > 0: return True
if target.domain == "ground" and self.ag_dmg > 0: return True
return False
```
### Target Acquisition Filter
```python
def acquire_target(unit, candidates):
in_range = [c for c in candidates
if unit.weapon.can_hit(c)
and unit.distance(c) <= unit.weapon.range_for(c)]
if not in_range: return None
return min(in_range, key=lambda c: priority(unit, c))
def priority(attacker, target):
base = attacker.threat_table.get(target.unit_type, 0)
if attacker.is_aa_specialist and target.domain == "air":
base *= 2
return -base # min() picks highest priority
```
### Leading Shot (AA projectile)
```python
def lead_target(shooter_pos, target_pos, target_vel, projectile_speed):
"""Solve for impact point of moving aerial target."""
rel = target_pos - shooter_pos
a = target_vel.dot(target_vel) - projectile_speed**2
b = 2 * rel.dot(target_vel)
c = rel.dot(rel)
t = solve_quadratic(a, b, c) # smallest positive root
return target_pos + target_vel * t
```
### Layered AA Umbrella
```python
def aa_coverage_at(point, aa_units):
"""Count AA layers covering a point — short-range + long-range."""
short = sum(1 for u in aa_units if u.aa_range < 500
and u.distance(point) < u.aa_range)
long = sum(1 for u in aa_units if u.aa_range >= 500
and u.distance(point) < u.aa_range)
return {"short": short, "long": long, "total": short + long}
```
### Splash Damage Domain Filter
```python
def apply_splash(center, radius, dmg_ag, dmg_aa, units):
for u in units:
if u.distance(center) > radius: continue
if u.domain == "ground": u.take_damage(dmg_ag)
elif u.domain == "air": u.take_damage(dmg_aa)
```
### Hard-Counter Recommender
```python
def recommend_counter(enemy_composition):
air_count = sum(1 for u in enemy_composition if u.domain == "air")
ground_count = len(enemy_composition) - air_count
if air_count > ground_count * 0.5:
return "build_aa_specialist"
return "build_anti_armor"
```
### Weapon Switch (turret with dual loadout)
```python
def turret_select_weapon(turret, target):
if target.domain == "air":
turret.active_weapon = turret.aa_weapon
else:
turret.active_weapon = turret.ag_weapon
turret.active_weapon.aim_at(target)
```
## 매 결정 기준
| Enemy comp | Counter |
|---|---|
| Air-heavy (mass mutalisk) | AA-specialist (Goliath, Thor) |
| Ground-heavy (tank push) | AG-specialist (Siege Tank, AT gun) |
| Mixed | Dual-purpose (Marine, Hydralisk) |
| Stealth air | Detector + AA combo |
**기본값**: 매 dual-purpose unit 의 의 의 의 의 의 의 economy efficient 의 의 의 의 의 의 specialist 의 의 의 의 의 의 dps 의 의 의 의 의 lower.
## 🔗 Graph
- 응용: [[Wargame Red Dragon]]
- Adjacent: [[Splash Damage]]
## 🤖 LLM 활용
**언제**: 매 RTS combat design 의 reference, 매 unit composition balance 의 의 framework.
**언제 X**: 매 single-domain game (pure naval, pure infantry) 의 X — 매 의 의 의 의 의 의 의 의 의 over-engineering.
## ❌ 안티패턴
- **All units are AA+AG**: 매 specialization 의 X 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 mass strategy 의 의 의 의 의 dominant.
- **AA range << AG range**: 매 의 의 의 의 의 의 의 의 의 의 의 air unit 의 의 의 의 의 의 의 의 의 의 kite-immune.
- **No leading shot**: 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 fast air unit 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 invulnerable.
- **Splash 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의**: 매 single splash 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 air + ground 둘다 wipe ⇒ 매 broken.
## 🧪 검증 / 중복
- Verified (Blizzard balance patches 20102023, Eugen Systems combat docs, Broken Arrow alpha docs 2026).
- 신뢰도 B.
## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — AA/AG targeting matrix + design rationale 정리 |