f8b21af4be
10_Wiki/Topics 대규모 정리: - 오류 캡처/미완성 stub 문서 227개 제거 - 교차폴더 중복 43클러스터 병합 (63파일 → redirect) - 링크명 정규화: 깨진 링크 수정·redirect 직결·개념 매핑 ~2,400건 - 카테고리 MOC 6개 신규 생성 - Graph 섹션 미해결 related-keyword 링크 10,058건 제거 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
273 lines
7.5 KiB
Markdown
273 lines
7.5 KiB
Markdown
---
|
|
id: wiki-2026-0508-bioshock-2007
|
|
title: BioShock (2007) — Game AI & Environmental Narrative
|
|
category: 10_Wiki/Topics
|
|
status: verified
|
|
canonical_id: self
|
|
aliases: [BioShock, Rapture, Big Daddy, Little Sister, environmental narrative, ecological AI]
|
|
duplicate_of: none
|
|
source_trust_level: B
|
|
confidence_score: 0.85
|
|
verification_status: applied
|
|
tags: [game-design, ai, environmental-narrative, immersive-sim, bioshock, fsm, ecological-ai, rapture]
|
|
raw_sources: []
|
|
last_reinforced: 2026-05-10
|
|
github_commit: pending
|
|
tech_stack:
|
|
language: game design
|
|
applicable_to: [Game AI Design, Narrative Design, Emergent Gameplay]
|
|
---
|
|
|
|
# BioShock (2007) — Game AI
|
|
|
|
## 📌 한 줄 통찰
|
|
> **"매 ecosystem 의 살아있는 듯"**. 매 BioShock 의 AI 는 매 player 의 chase 만 X — 매 own rule 의 organic actor (Big Daddy ↔ Little Sister). 매 simple FSM + 매 environmental narrative 의 결합 의 immersive sim 의 milestone. 매 "intentional 연출" 의 AI design 의 power.
|
|
|
|
## 📖 핵심
|
|
|
|
### 매 game (2007 Irrational Games)
|
|
- 매 underwater dystopia "Rapture".
|
|
- 매 immersive sim genre.
|
|
- 매 Ken Levine 감독.
|
|
- 매 narrative + 매 emergent gameplay.
|
|
|
|
### 매 AI 의 핵심 character
|
|
|
|
#### Splicer (적)
|
|
- 매 plasmid 중독 의 humans.
|
|
- 매 bezerker / leadhead / spider / Houdini.
|
|
- 매 simple state machine: idle / patrol / attack / flee.
|
|
- 매 environmental hazard 의 react.
|
|
|
|
#### Big Daddy
|
|
- 매 Little Sister 의 protector.
|
|
- 매 NEUTRAL until provoked.
|
|
- 매 Little Sister 의 attack 시 매 berserk.
|
|
- 매 unkillable 의 feel (high HP + damage).
|
|
|
|
#### Little Sister
|
|
- 매 ADAM harvester.
|
|
- 매 Big Daddy 의 follow.
|
|
- 매 vulnerable.
|
|
|
|
→ 매 player 의 morale choice (rescue / harvest).
|
|
|
|
### 매 ecological AI
|
|
|
|
#### Faction system
|
|
- 매 splicer ↔ Big Daddy ↔ Little Sister.
|
|
- 매 turret / camera 의 hack 의 ally.
|
|
- 매 NPC vs NPC 의 fight 의 emergent.
|
|
|
|
#### Reactive environment
|
|
- 매 oil + fire = 매 burning.
|
|
- 매 water + electric = 매 chain shock.
|
|
- 매 hack security camera → ally.
|
|
|
|
#### Audio diary
|
|
- 매 environmental narrative 의 핵심.
|
|
- 매 dead resident 의 voice.
|
|
- 매 player-paced lore.
|
|
|
|
### 매 design lesson
|
|
|
|
#### 1. Simple AI + Strong narrative = 매 strong feel
|
|
- 매 BioShock 의 AI 의 매 trivial FSM.
|
|
- 매 narrative 의 weight 의 매 "complex" 의 perception.
|
|
|
|
#### 2. Emergent > scripted
|
|
- 매 plasmid + AI rule = 매 player 의 invent.
|
|
- 매 designer 의 모든 case 의 anticipate X.
|
|
|
|
#### 3. Environmental storytelling
|
|
- 매 audio log + 매 corpse position + 매 graffiti.
|
|
- 매 "show" don't "tell".
|
|
- 매 Rapture 의 fall 의 매 explicit 의 X.
|
|
|
|
#### 4. Moral choice
|
|
- 매 Little Sister 의 rescue / harvest.
|
|
- 매 ending 의 두 가지.
|
|
- 매 player agency.
|
|
|
|
#### 5. Immersive sim 의 "ImSim" tradition
|
|
- 매 System Shock 2 (1999) 의 spiritual successor.
|
|
- 매 Deus Ex / Dishonored / Prey 와 의 lineage.
|
|
- 매 simulation > scripted.
|
|
|
|
### 매 modern AI 의 lesson
|
|
- 매 NPC AI 의 over-engineering 의 X — 매 narrative integration 의 더 중요.
|
|
- 매 ecological multi-agent 의 player 의 invent.
|
|
- 매 environmental narrative 의 RPG / open-world 의 best practice.
|
|
- 매 "actor" 의 player ≠ 매 chase target.
|
|
|
|
## 💻 패턴 (응용 — game AI design)
|
|
|
|
### Faction system
|
|
```ts
|
|
enum Faction {
|
|
PLAYER, SPLICER, BIG_DADDY, LITTLE_SISTER, SECURITY,
|
|
}
|
|
|
|
const RELATIONS: Record<string, 'hostile' | 'friendly' | 'neutral'> = {
|
|
'PLAYER:SPLICER': 'hostile',
|
|
'PLAYER:BIG_DADDY': 'neutral', // 매 until provoked
|
|
'PLAYER:LITTLE_SISTER': 'neutral',
|
|
'SPLICER:BIG_DADDY': 'hostile', // 매 emergent fight
|
|
'SPLICER:LITTLE_SISTER': 'hostile',
|
|
'BIG_DADDY:LITTLE_SISTER': 'friendly',
|
|
};
|
|
|
|
function relation(a: Faction, b: Faction): string {
|
|
return RELATIONS[`${Faction[a]}:${Faction[b]}`] || 'neutral';
|
|
}
|
|
```
|
|
|
|
### Big Daddy provoke logic
|
|
```ts
|
|
class BigDaddy {
|
|
state: 'guarding' | 'enraged' = 'guarding';
|
|
protectedSister: LittleSister;
|
|
|
|
update(scene: Scene) {
|
|
if (this.state === 'guarding') {
|
|
if (this.protectedSister.recentDamage > 0) {
|
|
this.state = 'enraged';
|
|
this.target = this.protectedSister.lastAttacker;
|
|
}
|
|
} else if (this.state === 'enraged') {
|
|
// 매 chase + heavy damage
|
|
this.chargeTo(this.target);
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Audio log (environmental narrative)
|
|
```ts
|
|
type AudioLog = {
|
|
id: string;
|
|
speaker: string;
|
|
date: string; // 매 in-game timeline
|
|
position: Vec3;
|
|
audioFile: string;
|
|
transcript: string;
|
|
};
|
|
|
|
function placeAudioLog(log: AudioLog, scene: Scene) {
|
|
scene.add({
|
|
type: 'pickup',
|
|
interactable: true,
|
|
onPickup: () => playAudio(log.audioFile),
|
|
visualHint: 'glowing tape',
|
|
position: log.position,
|
|
});
|
|
}
|
|
```
|
|
|
|
### Hack + ally
|
|
```ts
|
|
class SecurityCamera {
|
|
faction = Faction.SECURITY;
|
|
|
|
hack(by: Player) {
|
|
this.faction = Faction.PLAYER;
|
|
// 매 splicer 의 detect 시 매 player 가 alert
|
|
}
|
|
|
|
detect(scene: Scene) {
|
|
const enemies = scene.entities.filter(e =>
|
|
RELATIONS[`${this.faction}:${e.faction}`] === 'hostile'
|
|
);
|
|
enemies.forEach(e => this.alarm(e.position));
|
|
}
|
|
}
|
|
```
|
|
|
|
### Emergent interaction (oil + fire)
|
|
```ts
|
|
class OilPuddle {
|
|
onTouch(entity: Entity, world: World) {
|
|
if (entity.tags.includes('flame')) {
|
|
this.transform('FireField', { duration: 10 });
|
|
// 매 nearby splicer 의 burn → emergent
|
|
}
|
|
}
|
|
}
|
|
|
|
class WaterPuddle {
|
|
onTouch(entity: Entity, world: World) {
|
|
if (entity.tags.includes('electric')) {
|
|
this.transform('ElectrifiedWater', {
|
|
affectedRadius: 5,
|
|
damage: entity.damage,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Moral choice tracker
|
|
```ts
|
|
class MoralityTracker {
|
|
rescued = 0;
|
|
harvested = 0;
|
|
|
|
onLittleSisterRescue() {
|
|
this.rescued++;
|
|
grantReward('rescue');
|
|
}
|
|
|
|
onLittleSisterHarvest() {
|
|
this.harvested++;
|
|
grantReward('harvest'); // 매 더 많은 ADAM 가, 매 darker ending
|
|
}
|
|
|
|
ending(): 'good' | 'bad' | 'neutral' {
|
|
if (this.rescued > this.harvested * 2) return 'good';
|
|
if (this.harvested > this.rescued * 2) return 'bad';
|
|
return 'neutral';
|
|
}
|
|
}
|
|
```
|
|
|
|
## 🤔 결정 기준 (응용 — modern game AI)
|
|
| 상황 | BioShock lesson |
|
|
|---|---|
|
|
| Strong narrative game | 매 simple AI + 매 deep lore |
|
|
| Sandbox | 매 ecological multi-faction |
|
|
| Lore delivery | 매 audio log + 매 environmental |
|
|
| Emergent gameplay | 매 system 의 interact |
|
|
| Moral choice | 매 player agency 강조 |
|
|
| Open world NPC | 매 daily routine + faction |
|
|
|
|
**기본값**: 매 narrative > AI complexity. 매 system 의 multiply (player invents).
|
|
|
|
## 🔗 Graph
|
|
- 부모: [[Immersive-Sim]]
|
|
- 변형: [[BioShock-Critique]]
|
|
- 응용: [[Environmental-Narrative]]
|
|
- Adjacent: [[Baiting]]
|
|
|
|
## 🤖 LLM 활용
|
|
**언제**: 매 game narrative design. 매 immersive sim AI. 매 environmental storytelling. 매 NPC ecology.
|
|
**언제 X**: 매 specific game (다른 IP 의 mechanic). 매 PvP balance.
|
|
|
|
## ❌ 안티패턴 (game design)
|
|
- **AI 의 over-engineer**: 매 narrative 의 lose.
|
|
- **No environmental hint**: 매 lore X.
|
|
- **Big Daddy 의 unprovokable boss**: 매 player choice X.
|
|
- **Single faction**: 매 emergent X.
|
|
- **Moral choice 의 binary 의 explicit**: 매 immersion X.
|
|
- **Loot box (BioShock 가 안 함)**: 매 narrative violate.
|
|
|
|
## 🧪 검증 / 중복
|
|
- Verified (BioShock dev interviews, Ken Levine talks, immersive sim retrospective).
|
|
- 신뢰도 B.
|
|
- Related: [[Combat-AI]] · [[Narrative-Design]] · [[Boss-Orchestration]] · [[Baiting]] · [[Game-Design-Ethics]].
|
|
|
|
## 🕓 Changelog
|
|
| 날짜 | 변경 |
|
|
|---|---|
|
|
| 2026-05-08 | Phase 1 |
|
|
| 2026-05-10 | Manual cleanup — character + ecological + lesson + 매 faction / Big Daddy / moral code |
|