2025年7月26日土曜日

NWN2:EE DLGファイル構造解析 - 基礎編

📚 NWN2:EE DLGファイル構造解析 - 基礎編

Neverwinter Nights 2: Enhanced Editionのダイアログファイル(.dlg)を解析・翻訳する方のための完全ガイドです。

🎯 概要

NWN2:EE(Neverwinter Nights 2: Enhanced Edition)のDLG(ダイアログ)ファイルは、ゲーム内でのキャラクター間の会話を定義するファイルです。このドキュメントでは、DLGファイルの内部構造と各要素の詳細を説明します。

📁 ファイル基本情報

  • ファイル拡張子: .dlg
  • 形式: GFF (Game File Format) v3.2
  • エンコーディング: バイナリ形式
  • 文字列参照: TLKファイル(dialog.tlk)への参照

🏗️ 全体構造

DLG File
├── Root Struct
│   ├── Basic Properties (QuickChat, DelayReply, etc.)
│   ├── StartingList (会話開始条件)
│   ├── EntryList (NPCの発言)
│   ├── ReplyList (プレイヤーの選択肢)
│   └── AnimTagList (アニメーション設定)

⚙️ ルート構造の基本プロパティ

フィールド名 データ型 説明
EndConversation CResRef 会話終了時のスクリプト nw_walk_wp
QuickChat INT クイックチャット設定 0
DelayReplyF FLOAT 返答遅延時間 0.0
UseSpeakerApp BYTE 話者外見使用フラグ 1
MPCutscene INT マルチプレイヤーカットシーン 1

🚀 StartingList(会話開始条件)

会話の開始条件を定義するリスト。各要素は以下の構造を持ちます:

StartingList要素構造

{
  "ShowOnce": 0,              // 一度だけ表示するか
  "IsChild": 0,               // 子要素かどうか
  "Index": 120,               // 参照先エントリのインデックス
  "CameraInfo": {...},        // カメラ設定
  "ActiveConditiona": [...]   // 実行条件
}

実行条件 (ActiveConditiona)

{
  "Not": 0,                    // NOT条件
  "And": 1,                    // AND条件
  "Script": "gc_global_int",   // 実行スクリプト
  "Parameters": [              // パラメータリスト
    {
      "ParameterType": 2,      // パラメータタイプ
      "Parameter": "gb_in_scene"  // パラメータ値
    }
  ]
}

💬 EntryList(NPCの発言)

NPCが話す内容を定義するメインコンテンツです。

Entry要素構造

{
  "node_id": 0,                    // ノードID(配列インデックス)
  "text_strref": 160682,           // TLKファイル内のテキスト参照ID
  "speaker_resref": "khelgar",     // 話者リソース参照
  "sound_resref": "gl_khelgar_0000", // 音声ファイル参照
  "text": "実際のテキスト内容",        // 解決されたテキスト(TLKから取得)
  "replies": [...],                // プレイヤーの選択肢リスト
  "scripts": {}                    // 実行スクリプト
}

Entryの重要フィールド

フィールド名 データ型 説明
NeedsVO BYTE 音声が必要か 1
Animation DWORD アニメーションID 0
Quest CExoString 関連クエスト ""
DelayF FLOAT 表示遅延時間 3212836864

🗣️ RepliesList(プレイヤーの選択肢)

各Entryに対するプレイヤーの返答選択肢です。

Reply要素構造

{
  "reply_text_strref": null,       // プレイヤー選択肢のテキスト参照
  "next_node_id": 72,              // 次のエントリノードID
  "reply_text": "実際のテキスト",   // 解決されたテキスト
  "scripts": {}                    // 実行スクリプト
}

🔄 会話フロー

基本フロー

  1. StartingListで会話開始条件をチェック
  2. 条件に合致したEntryを表示
  3. プレイヤーがReplyを選択
  4. Replynext_node_idに従って次のEntryへ移動
  5. 会話終了まで2-4を繰り返し

条件分岐

  • ActiveConditionaによって表示・非表示を制御
  • スクリプト実行結果によって動的に変化
  • グローバル変数やクエスト状態に基づく分岐

🌐 翻訳における重要なポイント

📖 テキスト参照システム

  • text_strref: TLKファイル内のテキストID
  • reply_text_strref: プレイヤー選択肢のテキストID
  • 実際のテキストはTLKファイルから取得される

👤 話者識別

  1. EntryレベルのSpeakerフィールド
  2. グローバルレベルのVOCharNameフィールド
  3. ファイル名による推定(gl_khelgar.dlgkhelgar

🎵 音声ファイル連携

  • sound_resref: 音声ファイル名
  • NWN2インストールディレクトリから音声ファイルを検索
  • 翻訳時は音声ファイルも考慮が必要

💡 実用例

📄 サンプルファイル: gl_khelgar.dlg

{
  "file_type": "DLG",
  "version": "V3.2",
  "entries": [
    {
      "node_id": 0,
      "text_strref": 160682,
      "speaker_resref": "khelgar",
      "sound_resref": "gl_khelgar_0000",
      "text": "{Keep it casual, flat, player's going to hear this line a thousand times}All right, go on and ask, then.",
      "replies": [
        {
          "next_node_id": 72,
          "reply_text_strref": null
        }
      ]
    }
  ]
}

🔗 関連記事

より詳細な技術仕様については、NWN2:EE DLGファイル技術仕様 - 開発者編をご覧ください。

更新日: 2025年7月26日
バージョン: 1.0
作成者: NWN2:EE DLG Translation Tool Contributors

0 件のコメント:

コメントを投稿

NWN2:EE DLGファイル技術仕様 - 開発者編

⚙️ NWN2:EE DLGファイル技術仕様 - 開発者編 開発者・システム実装者 向けのNWN2:EE DLGファイルの詳細技術仕様書です。 📋 目次 GFFファイル形式詳細 フィールド仕様 スクリプトシステム 条件分岐システム カメラシステム 実装...