Files
2nd/10_Wiki/Topics/AI_and_ML/BioShock (2007).md
T
Antigravity Agent f8b21af4be Wiki cleanup: error-doc removal, dedup merge, link normalization
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>
2026-05-20 23:52:15 +09:00

7.5 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-bioshock-2007 BioShock (2007) — Game AI & Environmental Narrative 10_Wiki/Topics verified self
BioShock
Rapture
Big Daddy
Little Sister
environmental narrative
ecological AI
none B 0.85 applied
game-design
ai
environmental-narrative
immersive-sim
bioshock
fsm
ecological-ai
rapture
2026-05-10 pending
language applicable_to
game design
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

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

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)

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

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)

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

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

🤖 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.

🧪 검증 / 중복

🕓 Changelog

날짜 변경
2026-05-08 Phase 1
2026-05-10 Manual cleanup — character + ecological + lesson + 매 faction / Big Daddy / moral code