--- id: wiki-2026-0508-baiting title: Baiting (Game AI Tactic) category: 10_Wiki/Topics status: verified canonical_id: self aliases: [미끼 μ „μˆ , baiting, kiting, aggro pull, AI exploit, Wild Goose Chase] duplicate_of: none source_trust_level: B confidence_score: 0.85 verification_status: applied tags: [game-ai, rts, war-commander, ai-exploit, behavior-tree, aggro, kiting, npc-design] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: game design applicable_to: [RTS Tactics, NPC AI Design, Behavior Tree] --- # Baiting (Game AI Tactic) ## πŸ“Œ ν•œ 쀄 톡찰 > **"λ§€ NPC chase logic 의 reverse-exploit"**. λ§€ fortified enemy 의 λ§€ defense 의 outside 의 lure. λ§€ RTS 의 essential. λ§€ NPC AI design 의 antithesis β€” λ§€ player κ°€ AI 의 weakness 의 exploit. λ§€ designer 의 lesson: λ§€ stance 의 design. ## πŸ“– 핡심 ### λ§€ mechanism (War Commander 식) - λ§€ enemy 의 AI 의 'chase nearest visible threat'. - λ§€ bait unit κ°€ visible 의 β†’ λ§€ chase. - λ§€ chased κ°€ cover 의 lose β†’ λ§€ vulnerable. - λ§€ main force κ°€ ambush 의 destroy. ### λ§€ stance 의 dependency | Stance | λ§€ Bait | |---|---| | Fire at Will | βœ… effective | | Normal | βœ… effective | | Hold Position | ❌ X | | Stand Ground | ❌ X | | Aggressive | βœ… over-extends | β†’ λ§€ player setting 의 critical. ### λ§€ tactic 1. **Wild Goose Chase**: λ§€ fast unit κ°€ λ§€ slow / heavy 의 lure β†’ λ§€ ambush range. 2. **Bait and Bash**: λ§€ air unit 의 λ§€ AA 의 chase β†’ λ§€ ground attack. 3. **Plasma Baiting**: λ§€ expendable 의 λ§€ long-CD turret 의 fire β†’ λ§€ longer-range unit 의 turret destroy. 4. **Asymmetric pairing**: λ§€ counter-unit pairing 의 maximize. ### λ§€ defender response 1. **Hold Position**: λ§€ stance 의 lock. 2. **Honey Pot**: λ§€ fake weak 의 trap (mine field). 3. **Long-range counter** (Sniper, Rocket Barrage): λ§€ baiter 의 preemptive hit. 4. **Layout**: λ§€ funnel 의 design. ### λ§€ NPC AI design 의 lesson 1. **Chase 의 default 의 dangerous**: λ§€ bait 의 vulnerability. 2. **Stance 의 design**: λ§€ player choice. 3. **Threat 의 multi-factor**: λ§€ distance + HP + counter-class. 4. **Group cohesion**: λ§€ individual chase 의 group break. 5. **Leash**: λ§€ spawn 의 max distance. ### Behavior tree 의 baiting-resistant ``` Sequence: β”œβ”€ Threat 의 evaluate (multi-factor) β”œβ”€ Group cohesion check (peer 의 distance) β”œβ”€ Leash check (spawn 의 max range) β”œβ”€ Counter-class check (λ§€ vulnerable target X) └─ Chase OR Hold ``` ### λ§€ modern game 의 적용 - **MMO**: λ§€ aggro pull, λ§€ raid mechanic. - **MOBA**: λ§€ jungle gank. - **FPS** (Hunt: Showdown): λ§€ audio bait. - **Souls-like**: λ§€ enemy aggro 의 manipulate. - **Stealth** (MGS): λ§€ distraction. ### λ§€ PvP 의 application - λ§€ chase logic 의 player ↔ player 의 same. - λ§€ over-extension 의 punish. - λ§€ fake retreat (Mongol cavalry). ## πŸ’» νŒ¨ν„΄ (μ‘μš© β€” NPC AI design) ### Baiting-resistant threat eval ```ts function evaluateThreat(npc: Unit, target: Unit): number { const distance = npc.distance(target); const counterClass = npc.counters(target.class); const peerDist = npc.peers().map(p => p.distance(target)); const isolated = peerDist.every(d => d > 30); // λ§€ alone 의 chase 의 risk let score = 100 / (distance + 1); if (counterClass) score *= 2; if (isolated) score *= 0.5; // λ§€ isolated 의 trap risk if (target.hp < 0.2) score *= 1.5; // λ§€ finishing return score; } ``` β†’ λ§€ single nearest 의 X β€” λ§€ multi-factor. ### Group cohesion (anti-bait) ```ts function shouldChase(npc: Unit, target: Unit): boolean { const peers = npc.nearbyAllies(20); const peerCanFollow = peers.filter(p => p.distance(target) < npc.maxLeash + 10 ); // λ§€ alone 의 chase 의 X return peerCanFollow.length >= 2; } ``` ### Leash (max distance) ```ts class Unit { spawnPos: Vec3; maxLeash = 30; update() { if (this.distance(this.spawnPos) > this.maxLeash) { this.target = null; this.moveTo(this.spawnPos); this.heal(0.5); // λ§€ disengage 의 reset } } } ``` β†’ λ§€ λ¬΄ν•œ chase 의 prevent. ### Stance 의 system ```ts enum Stance { HoldPosition, Normal, FireAtWill, Aggressive } class Unit { stance: Stance = Stance.Normal; shouldEngage(target: Unit): boolean { switch (this.stance) { case Stance.HoldPosition: return this.canFireWithoutMoving(target); case Stance.Normal: return this.distance(target) < this.engagementRange; case Stance.FireAtWill: return this.distance(target) < this.engagementRange * 1.5; case Stance.Aggressive: return this.distance(target) < this.engagementRange * 2; } } } ``` ### Honey pot (defender side) ```ts function generateHoneyPot(layout: BaseLayout): Trap { const weakLookingPath = layout.findFakeOpening(); const minefield = placeMines(weakLookingPath, density=0.8); const sniperBunker = placeSniper(weakLookingPath.entrance); return { path: weakLookingPath, mines: minefield, sniper: sniperBunker }; } ``` ## πŸ€” κ²°μ • κΈ°μ€€ | 상황 | Approach | |---|---| | Player wants safe attack | Bait β†’ ambush | | Defender wants stable | Hold Position | | Counter to bait | Honey pot + sniper | | NPC design | Multi-factor threat + leash + cohesion | | MMO raid | Tank-aggro + threat ceiling | | Soulslike | Enemy aggro 의 fixed range | **κΈ°λ³Έκ°’**: λ§€ player tactic = bait + ambush. λ§€ NPC design = multi-factor + leash + cohesion. ## πŸ”— Graph - λΆ€λͺ¨: [[RTS-Tactics]] - λ³€ν˜•: [[Kiting]] Β· [[Aggro-Pull]] Β· [[Wild-Goose-Chase]] - μ‘μš©: [[Behavior-Tree]] - Adjacent: [[War-Commander]] ## πŸ€– LLM ν™œμš© **μ–Έμ œ**: λ§€ RTS / MMO tactic. λ§€ NPC AI design. λ§€ player 의 AI exploit pattern 뢄석. **μ–Έμ œ X**: λ§€ turn-based (different mechanic). λ§€ narrative-only. ## ❌ μ•ˆν‹°νŒ¨ν„΄ (NPC design μΈ‘) - **Single-target chase**: λ§€ trivially baitable. - **No leash**: λ§€ λ¬΄ν•œ chase. - **No group cohesion**: λ§€ individual extract. - **Stance X**: λ§€ player control X. - **Static threat (distance only)**: λ§€ counter-class 의 ignore. - **Spawn camping vulnerability**: λ§€ spawn 의 leash break. ## πŸ§ͺ 검증 / 쀑볡 - Verified (War Commander wiki, RTS design literature). - 신뒰도 B. - Related: [[Combat-AI]] Β· [[Behavior-Tree]] Β· [[Pursuit-Logic]]. ## πŸ•“ Changelog | λ‚ μ§œ | λ³€κ²½ | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup β€” mechanism + tactic + behavior tree code + NPC design lesson |