darallium's tech blog
home
blog
tech

qiita: @darallium
github: darallium
twitter: /darallium/
instagram: yu_kyu_n
email
Home tech tyrano-manual
  • TyranoScriptマニュアル完全版

    1. 目次
    2. 個別タグ仕様メモ
    3. 1. キャラクター操作関連タグ
    4. 1.1. [chara_new]
    5. 1.2. [chara_face]
    6. 1.3. [chara_layer]
    7. 1.4. [chara_part]
    8. 1.5. [chara_part_reset]
    9. 1.6. [chara_show]
    10. 1.7. [chara_hide]
    11. 1.8. [chara_hide_all]
    12. 1.9. [chara_delete]
    13. 1.10. [chara_mod]
    14. 1.11. [chara_move]
    15. 1.12. [chara_config]
    16. 2. メッセージ・テキスト関連タグ
    17. 2.1. [font]
    18. 2.2. [deffont]
    19. 2.3. [resetfont]
    20. 2.4. [style]
    21. 2.5. [deletestyle]
    22. 2.6. [message_config]
    23. 2.7. [ruby]
    24. 2.8. [mark]
    25. 2.9. [endmark]
    26. 2.10. [text]
    27. 2.11. [r]
    28. 2.12. [l]
    29. 2.13. [p]
    30. 2.14. [graph]
    31. 2.15. [er]
    32. 2.16. [cm]
    33. 2.17. [ct]
    34. 2.18. [current]
    35. 2.19. [position]
    36. 2.20. [fuki_start]
    37. 2.21. [fuki_stop]
    38. 2.22. [fuki_chara]
    39. 2.23. [nolog]
    40. 2.24. [endnolog]
    41. 2.25. [pushlog]
    42. 2.26. [configdelay]
    43. 2.27. [delay]
    44. 2.28. [resetdelay]
    45. 2.29. [nowait]
    46. 2.30. [endnowait]
    47. 2.31. [config_record_label]
    48. 3. 画像・背景・レイヤ操作関連タグ
    49. 3.1. [image]
    50. 3.2. [freeimage], [freelayer]
    51. 3.3. [free]
    52. 3.4. [ptext]
    53. 3.5. [clearfix]
    54. 3.6. [backlay]
    55. 3.7. [wt]
    56. 3.8. [trans]
    57. 3.9. [bg]
    58. 3.10. [bg2]
    59. 3.11. [layopt]
    60. 4. ラベル・ジャンプ操作関連タグ
    61. 4.1. [label]
    62. 4.2. [jump]
    63. 4.3. [link]
    64. 4.4. [endlink]
    65. 4.5. [glink]
    66. 4.6. [glink_config]
    67. 5. 変数・JS操作・ファイル読込関連タグ
    68. 5.1. [eval]
    69. 5.2. [clearvar]
    70. 5.3. [clearsysvar]
    71. 5.4. [trace]
    72. 5.5. [emb]
    73. 5.6. [iscript], [endscript]
    74. 5.7. [loadjs]
    75. 5.8. [preload]
    76. 5.9. [unload]
    77. 6. マクロ・分岐・サブルーチン関連タグ
    78. 6.1. [if], [elsif], [else], [endif]
    79. 6.2. [clearstack]
    80. 6.3. [call]
    81. 6.4. [return]
    82. 6.5. [macro], [endmacro]
    83. 6.6. [erasemacro]
    84. 6.7. [ignore], [endignore]
    85. 6.8. [sleepgame]
    86. 6.9. [awakegame]
    87. 6.10. [breakgame]
    88. 7. システム操作関連タグ
    89. 7.1. [s]
    90. 7.2. [wait]
    91. 7.3. [wait_cancel]
    92. 7.4. [showsave]
    93. 7.5. [showload]
    94. 7.6. [showmenu]
    95. 7.7. [showlog]
    96. 7.8. [savesnap]
    97. 7.9. [autosave]
    98. 7.10. [autoload]
    99. 7.11. [checkpoint]
    100. 7.12. [rollback]
    101. 7.13. [clear_checkpoint]
    102. 7.14. [start_keyconfig], [stop_keyconfig]
    103. 7.15. [close]
    104. 7.16. [screen_full]
    105. 7.17. [dialog]
    106. 7.18. [apply_local_patch]
    107. 7.19. [check_web_patch]
    108. 7.20. [closeconfirm_on], [closeconfirm_off]
    109. 8. システムデザイン変更関連タグ
    110. 8.1. [body]
    111. 8.2. [title]
    112. 8.3. [save_img]
    113. 8.4. [cursor]
    114. 8.5. [showmenubutton], [hidemenubutton]
    115. 8.6. [sysview]
    116. 8.7. [loadcss]
    117. 8.8. [set_resizecall]
    118. 8.9. [dialog_config], [dialog_config_ok], [dialog_config_ng], [dialog_config_filter]
    119. 8.10. [mode_effect]
    120. 8.11. [loading_log]
    121. 8.12. [lang_set]
    122. 9. 入力フォーム関連タグ
    123. 9.1. [edit]
    124. 9.2. [commit]
    125. 10. 演出・効果・動画関連タグ
    126. 10.1. [quake]
    127. 10.2. [quake2]
    128. 10.3. [vibrate], [vibrate_stop]
    129. 10.4. [movie]
    130. 10.5. [bgmovie]
    131. 10.6. [wait_bgmovie]
    132. 10.7. [stop_bgmovie]
    133. 10.8. [layermode]
    134. 10.9. [layermode_movie]
    135. 10.10. [free_layermode]
    136. 10.11. [mask]
    137. 10.12. [mask_off]
    138. 11. アニメーション関連タグ
    139. 11.1. [anim]
    140. 11.2. [wa]
    141. 11.3. [stopanim]
    142. 11.4. [keyframe], [endkeyframe]
    143. 11.5. [frame]
    144. 11.6. [kanim]
    145. 11.7. [stop_kanim]
    146. 11.8. [xanim]
    147. 11.9. [stop_xanim]
    148. 12. AR関連タグ
    149. 12.1. [bgcamera]
    150. 12.2. [qr_config]
    151. 12.3. [stop_bgcamera]
    152. 12.4. [qr_define]
    153. 13. カメラ操作関連タグ ([camera], [reset_camera], [wait_camera])
    154. 13.1. [camera]
    155. 13.2. [reset_camera]
    156. 13.3. [wait_camera]
    157. 14. VChat関連タグ
    158. 14.1. [vchat_in]
    159. 14.2. [vchat_config]
    160. 14.3. [vchat_chara]
    161. 内部状態
    162. kag.stat
    163. kag.tmp
    164. kag.variable
    165. その他の状態
    166. 状態遷移

    個別タグ仕様メモ

    凡例

    • (必須): このパラメータは必須です。省略するとエラーが発生する可能性があります。
    • (任意): このパラメータは任意です。省略可能です。
    • (デフォルト値: value): パラメータが省略された場合のデフォルト値を示します。

    1. キャラクター操作関連タグ

    1.1. [chara_new]

    • グループ: キャラクター操作
    • タイトル: キャラクターの定義
    • 説明:
      • ゲームに登場するキャラクターの基本的な情報を定義します。
      • ここで定義したキャラクターは、[chara_show] で表示したり、[chara_mod] で表情を変更したりできます。
      • name 属性はゲーム内で一意である必要があります。他のキャラクターや要素の name と重複しないようにしてください。
    • パラメータ:
      • name: (必須) キャラクターを管理するための名前(半角英数)。 (デフォルト値: "")
      • storage: (必須) キャラクターの基本画像ファイル。data/fgimage フォルダから読み込まれます。 (デフォルト値: "")
      • width: (任意) 画像の表示横幅 (px)。省略時は元画像のサイズ。 (デフォルト値: "")
      • height: (任意) 画像の表示高さ (px)。省略時は元画像のサイズ。 (デフォルト値: "")
      • reflect: (任意) 画像を左右反転するか (true または false)。 (デフォルト値: "false")
      • jname: (任意) 日本語名など、メッセージウィンドウの名前表示欄に表示する名前。 (デフォルト値: "")
      • color: (任意) jname を表示する際の文字色 (0xRRGGBB形式)。 (デフォルト値: "")
    • 期待される動作:
      1. kag.stat.charas オブジェクトに、指定された name をキーとしてキャラクター情報 (pmで渡されたパラメータ) を格納します。
      2. map_face["default"] に storage で指定された画像パスを格納します。
      3. jname が指定されている場合、kag.stat.jcharas オブジェクトに {jname: name} の形式でマッピングを格納します。
      4. 指定された storage の画像をプリロードします。
      5. プリロード完了後、画像の元の幅と高さを取得し、origin_width, origin_height としてキャラクター情報に追加します。
      6. ふきだしのデフォルト位置 (fuki.left, fuki.top) を計算し、キャラクター情報に追加します。
      7. [fuki_chara] タグで設定される領域を初期化します。
      8. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [chara_new name=yuko storage=yuko.png jname=ゆうこ]

    1.2. [chara_face]

    • グループ: キャラクター操作

    • タイトル: キャラクター表情登録

    • 説明:

      • [chara_new] で定義したキャラクターに、差分表情として使用する画像を登録します。
      • ここで登録した表情は [chara_mod] や [chara_ptext] タグの face パラメータで呼び出すことができます。
    • パラメータ:

      • name: (必須) 表情を登録するキャラクターの name。
      • face: (必須) 登録する表情の名前(happy, angry など任意)。
      • storage: (必須) 表情に対応する画像ファイル。data/fgimage フォルダから読み込まれます。
    • 期待される動作:

      1. 指定された name のキャラクター定義 (kag.stat.charas[pm.name]) を参照します。キャラクターが存在しない場合はエラーを発生させます。
      2. キャラクター定義内の map_face オブジェクトに、{face: storage} の形式で表情情報を追加または上書きします。storage がHTTP/HTTPS URLでない場合は、storage の値がそのまま格納されます (パス補完は chara_mod などで行われます)。
      3. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      ;表情の登録
      [chara_face name="yuko" face="angry" storage="newface.png"]
      
      ;表情の適用
      [chara_mod name="yuko" face="angry"]
      
      ;発言者の名前も同時にかえたい場合
      [chara_ptext name="yuko" face="angry"]
      
      ;短縮して書けます。以下も同じ意味
      #yuko:angry
      
      ;chara_new で登録した画像はdefaultという名前で指定可能
      #yuko:default

    1.3. [chara_layer]

    • グループ: キャラクター操作
    • タイトル: キャラクターの差分パーツ定義
    • 説明:
      • キャラクターの特定の部位(目、口など)に対して、差分パーツ画像を登録します。
      • [chara_part] タグでこれらのパーツを組み合わせて表示を切り替えることができます。
      • 最初に登録された id がその part のデフォルト表示となります。
    • パラメータ:
      • name: (必須) パーツを登録するキャラクターの name。
      • part: (必須) パーツの部位名(eye, mouth など任意)。
      • id: (必須) そのパーツの差分状態を示す名前(smile, close など任意)。
      • storage: (任意) 差分パーツ画像ファイル。data/fgimage フォルダから読み込まれます。none を指定すると透明なパーツ(表示しない状態)を定義できます。 (デフォルト値: "")
      • zindex: (任意) パーツの重ね順。数値が大きいほど前面に表示されます。省略した場合、chara_layerタグで最後に指定された値が引き継がれます。 (デフォルト値: "")
      • frame_image: (任意) カンマ区切りで画像ファイルを指定すると、フレームアニメーション(瞬きなど)を定義できます。
      • frame_time: (任意) カンマ区切りで各フレームの表示時間をミリ秒で指定します。1000や1000-2000(ランダム)のように指定。省略すると自動で設定されます。
      • frame_direction: (任意) フレームアニメーションの再生方向。alternateを指定すると往復再生。デフォルトは通常再生。
      • frame_loop: (任意) フレームアニメーションをループさせるか (true or false)。デフォルトはtrue。
      • lip_image: (任意) カンマ区切りで画像ファイルを指定すると、リップシンク(口パク)用のフレームを定義できます。frame_imageとは同時に指定できません。
      • lip_time: (任意) テキスト表示にあわせて口パクさせる場合の1フレームあたりの表示時間(ミリ秒)。デフォルトは50。
      • lip_type: (任意) リップシンクのタイプ (text または voice)。デフォルトはtext。
      • lip_volume: (任意) lip_type="voice"の場合、各リップシンクフレームを表示するための音量の閾値をカンマ区切りで指定します(0〜100)。
      • lip_se_buf: (任意) 特定の効果音バッファ(playseのbuf)の音量に口パクを連動させたい場合にバッファ番号を指定します。カンマ区切りで複数指定可。
      • lip_se_buf_all: (任意) キャラクター名に関係なく、ここで指定した効果音バッファ(playseのbuf)の音量に口パクを連動させたい場合にバッファ番号を指定します。
    • 期待される動作:
      1. 指定された name のキャラクター定義 (kag.stat.charas[pm.name]) を参照します。キャラクターが存在しない場合はエラーを発生させます。
      2. キャラクター定義内に _layer オブジェクトがなければ作成します。
      3. _layer オブジェクト内に指定された part 名のキーが存在しなければ、新しいパーツ領域を作成し、default_part_id, current_part_id に指定された id を、zindex に指定された zindex を設定します。
      4. パーツ領域内の指定された id に、差分パーツ情報(pmで渡されたパラメータ)を格納します。
      5. lip_image, frame_image, frame_time, lip_volume がカンマ区切り文字列で指定された場合は配列に変換します。
      6. frame_time, lip_volume の要素数が不足している場合はデフォルト値で補完します。
      7. すでにキャラクターが表示されており(is_show == "true")、かつ変更対象のパーツが現在表示されているパーツ(current_part_id === pm.id)の場合、[chara_part] タグを内部的に呼び出して表示を即時更新します。
      8. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    
    [chara_layer name="yuko" part=mouse id=egao storage="image/egao.png" ]

    1.4. [chara_part]

    • グループ: キャラクター操作
    • タイトル: キャラクターの差分パーツ変更
    • 説明:
      • [chara_layer] タグで定義したキャラクターの差分パーツの表示を切り替えます。
      • part=id の形式でパラメータを指定します。part は [chara_layer] で指定した part 名、id は同じく id 名です。
      • 複数のパーツを同時に変更できます。
      • id の代わりに画像ファイル名を直接指定することも可能です(allow_storage=true が必要)。
      • zindex も同時に変更できます (part名_zindex=数値 の形式)。
    • パラメータ:
      • name: (必須) パーツを変更するキャラクターの name。
      • time: (任意) パーツが切り替わる際のフェード時間 (ミリ秒)。省略時は [chara_config] の time を参照。0で瞬間表示。
      • wait: (任意) フェードの完了を待つか (true または false)。 (デフォルト値: "true")
      • allow_storage: (任意) part の値として id ではなく画像ファイル名を直接指定することを許可するか (true または false)。 (デフォルト値: "false")
      • (任意) part=id: 特定の part に対して表示する id を指定します。例: eye=smile, mouth=close
      • (任意) part_zindex=数値: 特定の part の重ね順を変更します。例: eye_zindex=10
    • 期待される動作:
      1. 指定された name のキャラクター定義 (kag.stat.charas[pm.name]) とパーツ定義 (_layer) を参照します。存在しない場合はエラーとなります。
      2. 指定された part=id パラメータを走査します。
      3. 各 part について、指定された id がパーツ定義に存在するか、または allow_storage=true かどうかを確認します。
      4. 条件を満たす場合、その part の current_part_id を指定された id (または画像ファイル名) に更新します。
      5. 該当する画像ファイルをプリロードリストに追加します。フレームアニメーション(frame_image や lip_image)が定義されている場合は、それらの画像も追加します。
      6. 切替対象のパーツが一つもなければ、次のタグへ進みます。
      7. 切替対象のパーツに対応する画像 (preload_srcs) をプリロードします。
      8. プリロード完了後、キャラクターのDOM要素 (.tyrano_chara) を取得します。
      9. 切替対象の各パーツについて、
        • 現在のパーツ画像(<img>要素)を取得します。フレームアニメーションが設定されている場合、関連する<img>要素もすべて取得します。
        • time が指定されている場合:
          • 現在のパーツ画像をフェードアウトさせ、完了後に削除します (j_img.fadeTo(time, 0, remove))。
          • 新しいパーツ画像(<img>要素)を生成し、src を設定し、透明状態 (opacity:0) で現在のパーツ画像の直後に追加します。
          • フレームアニメーションやリップシンクが定義されていれば、それらを新しいパーツ画像に適用します。
          • part名_zindex パラメータが指定されていれば、z-index を設定します。
          • 新しいパーツ画像をフェードインさせます (j_new_img.fadeTo(time, 1, complete))。
          • すべてのパーツのアニメーションが完了したら nextOrder を呼び出します (wait=true の場合)。
        • time が指定されていない場合 (瞬間切り替え):
          • 現在のパーツ画像の src を新しいものに書き換えます。
          • フレームアニメーションが設定されていた場合は、関連する<img>要素を削除し、フレームアニメーションを再設定します。
          • z-index を再設定します。
      10. wait=false の場合は、アニメーションの完了を待たずに nextOrder を呼び出します。
    • サンプルコード:
    
    [chara_part name=yuko mouse=happy eye=happy]

    1.5. [chara_part_reset]

    • グループ: キャラクター操作
    • タイトル: キャラクターの差分パーツをデフォルトに戻す
    • 説明:
      • [chara_part] で変更したキャラクターの差分パーツ表示を、[chara_layer] で最初に定義したデフォルトの状態に戻します。
      • part パラメータでリセット対象の部位を指定できます。省略するとすべての部位が対象になります。
    • パラメータ:
      • name: (必須) リセット対象のキャラクターの name。
      • part: (任意) リセットするパーツ部位名をカンマ区切りで指定。省略すると全パーツが対象。
    • 期待される動作:
      1. 指定された name のキャラクター定義とパーツ定義を参照します。存在しない場合はエラーとなります。
      2. リセット対象のパーツを特定します (part パラメータがあればそれを、なければ全パーツ)。
      3. 各対象パーツについて、その default_part_id を取得します。
      4. [chara_part] タグを内部的に呼び出し、特定したパーツと default_part_id をパラメータとして渡して実行します。
    • サンプルコード: tyranoscript [chara_part_reset name=yuko]

    1.6. [chara_show]

    • グループ: キャラクター操作
    • タイトル: キャラクターの登場
    • 説明:
      • [chara_new] で定義したキャラクターを画面上に表示(登場)させます。
      • 登場時の表情(face)や画像(storage)、位置(left, top)、サイズ(width, height)、重ね順(zindex, depth)、左右反転(reflect)などを指定できます。
      • time を指定すると、指定時間をかけてフェードインしながら登場します。
      • pos_mode が有効な場合 ([chara_config]で設定)、left, top を指定しなければ自動的に立ち位置が調整されます。
    • パラメータ:
      • name: (必須) 表示するキャラクターの name。
      • time: (任意) 登場にかける時間 (ミリ秒)。省略時は [chara_config] の time を参照。0で瞬間表示。 (デフォルト値: 1000)
      • layer: (任意) キャラクターを表示する前景レイヤ (0以上の整数)。 (デフォルト値: "0")
      • zindex: (任意) 重ね順。数値が大きいほど前面。 (デフォルト値: "1")
      • depth: (任意) zindex が同じ場合の重ね順 (front または back)。 (デフォルト値: "front")
      • page: (任意) 表示するページ (fore または back)。 (デフォルト値: "fore")
      • wait: (任意) 登場アニメーションの完了を待つか (true または false)。 (デフォルト値: "true")
      • face: (任意) 表示する表情の face 名。省略時はデフォルト表情。
      • storage: (任意) 表示する画像ファイル。face より優先されます。
      • reflect: (任意) 左右反転するか (true または false)。 (デフォルト値: "")
      • width: (任意) 表示する横幅 (px)。省略時は [chara_new] での定義値。
      • height: (任意) 表示する高さ (px)。省略時は [chara_new] での定義値。
      • left: (任意) 表示する左端位置 (px)。省略時は pos_mode に従う。
      • top: (任意) 表示する上端位置 (px)。省略時は pos_mode に従う。
    • 期待される動作:
      1. 指定された name のキャラクター定義 (kag.stat.charas[pm.name]) を参照します。存在しない場合はエラーとなります。
      2. すでに同名のキャラクターが指定レイヤ/ページに表示されている場合は、何もしません(nextOrderも呼ばない可能性があります)。
      3. 表示する画像(storage_url)を決定します (pm.face → pm.storage → cpm.storage の順で優先)。
      4. 表示に必要な画像(ベース画像、パーツ画像、フレームアニメーション画像)をプリロードリストに追加します。
      5. キャラクター要素(.tyrano_chara クラスを持つ <div>)と、その中にベース画像 (<img>) およびパーツ画像 (<img>) を生成します。
      6. width, height, zindex, reflect を適用します。
      7. パーツ画像にはフレームアニメーション(frame_image や lip_image)が定義されていれば適用します。
      8. すべての画像をプリロードします。
      9. プリロード完了後:
        • pos_mode が有効で left/top が未指定の場合、画面上の他のキャラクターの位置を考慮して自動的に立ち位置を計算し、必要であれば既存キャラクターをアニメーションさせて移動させます。
        • pos_mode が無効、または left/top が指定されている場合は、指定された位置にキャラクターを配置します。
        • キャラクター要素を対象レイヤに追加します (depth に応じて prepend または append)。
        • キャラクター要素をフェードインさせます (pm.time を参照)。
        • アニメーション完了後、wait=true なら nextOrder を呼び出します。
      10. wait=false の場合は、アニメーション開始と同時に nextOrder を呼び出します。
    • サンプルコード:
    
    [chara_show name="yuko" ]

    1.7. [chara_hide]

    • グループ: キャラクター操作
    • タイトル: キャラクターの退場
    • 説明:
      • 画面上に表示されているキャラクターを退場させます。
      • time を指定すると、指定時間をかけてフェードアウトしながら退場します。
      • pos_mode が有効な場合 ([chara_config]で設定)、退場後に残りのキャラクターの立ち位置が自動的に調整されます。
    • パラメータ:
      • name: (必須) 退場させるキャラクターの name。
      • time: (任意) 退場にかける時間 (ミリ秒)。省略時は [chara_config] の time を参照。0で瞬間非表示。 (デフォルト値: "1000")
      • wait: (任意) 退場アニメーションの完了を待つか (true または false)。 (デフォルト値: "true")
      • layer: (任意) キャラクターが存在するレイヤ。省略時は"0"。
      • page: (任意) キャラクターが存在するページ (fore または back)。 (デフォルト値: "fore")
      • pos_mode: (任意) 退場後に立ち位置の自動調整を行うか (true または false)。 (デフォルト値: "true")
    • 期待される動作:
      1. 指定された name のキャラクター要素 (.tyrano_chara) を取得します。存在しない場合は次のタグへ進みます。
      2. キャラクター定義 (kag.stat.charas[pm.name]) の is_show を "false" に設定します。
      3. キャラクター要素をフェードアウトさせます (pm.time を参照)。
      4. フェードアウト完了後:
        • キャラクター要素をDOMから削除します (remove())。
        • pos_mode が有効な場合、残りのキャラクターの立ち位置を自動調整するアニメーションを開始します。
        • すべてのアニメーション完了後、wait=true なら nextOrder を呼び出します。
      5. wait=false の場合は、フェードアウト開始と同時に nextOrder を呼び出します。
      6. chara_memory=false の場合、退場するキャラクターの storage をデフォルト表情に戻します。
    • サンプルコード:
    [chara_hide name="yuko"]

    1.8. [chara_hide_all]

    • グループ: キャラクター操作
    • タイトル: キャラクターを全員退場
    • 説明:
      • 指定したレイヤに表示されているすべてのキャラクターを退場させます。
      • time を指定すると、指定時間をかけてフェードアウトしながら退場します。
    • パラメータ:
      • time: (任意) 退場にかける時間 (ミリ秒)。省略時は [chara_config] の time を参照。0で瞬間非表示。 (デフォルト値: "1000")
      • wait: (任意) 退場アニメーションの完了を待つか (true または false)。 (デフォルト値: "true")
      • layer: (任意) 対象のレイヤ。省略時は"0"。
      • page: (任意) 対象のページ (fore または back)。 (デフォルト値: "fore")
    • 期待される動作:
      1. 指定されたレイヤ/ページ内のすべてのキャラクター要素 (.tyrano_chara) を取得します。
      2. 取得したすべてのキャラクター要素をフェードアウトさせます (pm.time を参照)。
      3. すべてのキャラクター定義 (kag.stat.charas) の is_show を "false" に設定します (レイヤ指定がある場合はそのレイヤのキャラのみ)。
      4. フェードアウト完了後:
        • すべてのキャラクター要素をDOMから削除します (remove())。
        • wait=true なら nextOrder を呼び出します。
      5. wait=false の場合は、フェードアウト開始と同時に nextOrder を呼び出します。
      6. chara_memory=false の場合、すべてのキャラクターの storage をデフォルト表情に戻します。
    • サンプルコード:
    [chara_hide_all time=1000 wait=true]

    1.9. [chara_delete]

    • グループ: キャラクター操作
    • タイトル: キャラクター情報の削除
    • 説明:
      • [chara_new] で定義したキャラクター情報を削除します。
      • このタグを実行しても画面上のキャラクターは消えません。画面から消したい場合は [chara_hide] を使用してください。
    • パラメータ:
      • name: (必須) 削除するキャラクターの name。
    • 期待される動作:
      1. kag.stat.charas オブジェクトから指定された name のキーを持つプロパティを削除します (delete)。
      2. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [chara_delete name="yuko" ]

    1.10. [chara_mod]

    • グループ: キャラクター操作
    • タイトル: キャラクター画像変更
    • 説明:
      • 表示されているキャラクターの画像を変更します。主に表情差分の切り替えに使用します。
      • face パラメータで [chara_face] で登録した表情名を指定するか、storage パラメータで画像ファイルを直接指定します。
      • time を指定するとクロスフェードしながら切り替わります。
    • パラメータ:
      • name: (必須) 画像を変更するキャラクターの name。
      • face: (任意) 表示する表情の face 名。
      • storage: (任意) 表示する画像ファイル。face より優先されます。
      • reflect: (任意) 左右反転するか (true または false)。 (デフォルト値: "")
      • time: (任意) 切り替えにかける時間 (ミリ秒)。省略時は [chara_config] の time を参照。0で瞬間表示。
      • cross: (任意) クロスフェード方式 (true または false)。 (デフォルト値: "true")
      • wait: (任意) 切り替えアニメーションの完了を待つか (true または false)。 (デフォルト値: "true")
      • next: (任意) false を指定すると、[chara_mod]タグ完了時にnextOrderを呼び出さないようにします。 (デフォルト値: "true")
    • 期待される動作:
      1. 指定された name のキャラクター要素 (.tyrano_chara) を取得します。存在しない場合は、キャラクター定義 (kag.stat.charas) の storage と reflect を更新して次のタグへ進みます。
      2. 表示する画像(storage_url)を決定します (pm.face → pm.storage の順で優先)。画像が指定されなかった場合、reflect のみ処理して次のタグへ進みます。
      3. 表示する画像をプリロードします。
      4. プリロード完了後:
        • time が指定されている場合 (フェード切り替え):
          • 現在の画像(<img>)をクローンし、新しい src を設定し、透明状態 (opacity:0) で現在の画像の直後に追加します。
          • cross=true の場合は、現在の画像をフェードアウトさせます。
          • 新しい画像をフェードインさせます。
          • アニメーション完了後、現在の画像を削除します。
          • wait=true なら nextOrder を呼び出します。
        • time が指定されていない場合 (瞬間切り替え):
          • 現在の画像の src を新しいものに書き換えます。
          • wait=true なら nextOrder を呼び出します。
      5. キャラクター定義 (kag.stat.charas) の storage を更新します。
      6. wait=false の場合は、アニメーション開始と同時に nextOrder を呼び出します (pm.next が “false” でない場合)。
    • サンプルコード:
    [chara_mod name="yuko" storage="newface.png"]

    1.11. [chara_move]

    • グループ: キャラクター操作
    • タイトル: キャラクターの位置変更
    • 説明:
      • 表示されているキャラクターの表示位置 (left, top) やサイズ (width, height) を変更します。
      • anim=true を指定すると、指定時間をかけてアニメーションしながら変更します。アニメーション効果は [chara_config] の effect を参照しますが、このタグの effect パラメータで上書きも可能です。
      • left, top には +=数値, =数値 の形式で相対位置を指定できます。
    • パラメータ:
      • name: (必須) 移動させるキャラクターの name。
      • left: (任意) 移動後の左端位置 (px)。相対指定可。
      • top: (任意) 移動後の上端位置 (px)。相対指定可。
      • width: (任意) 変更後の横幅 (px)。
      • height: (任意) 変更後の高さ (px)。
      • anim: (任意) アニメーションさせるか (true または false)。 (デフォルト値: "false")
      • time: (任意) アニメーション時間 (ミリ秒)。 (デフォルト値: "600")
      • effect: (任意) アニメーション効果。 (デフォルト値: "")
      • wait: (任意) アニメーションの完了を待つか (true または false)。 (デフォルト値: "true")
    • 期待される動作:
      1. 指定された name のキャラクター要素 (.tyrano_chara) とその中の <img> 要素を取得します。存在しない場合は次のタグへ進みます。
      2. 変更後のCSSスタイル (anim_style, img_anim_style) を作成します (left, top, width, height を基に)。
      3. anim=true の場合:
        • キャラクター要素と<img>要素に対して .animate() を実行し、スタイルを適用します。
        • アニメーション完了後、wait=true なら nextOrder を呼び出します。
      4. anim=false の場合:
        • キャラクター要素をフェードアウトさせます。
        • フェードアウト完了後、スタイルを即時適用します。
        • キャラクター要素をフェードインさせます。
        • フェードイン完了後、wait=true なら nextOrder を呼び出します。
      5. wait=false の場合は、アニメーション開始と同時に nextOrder を呼び出します。
    • サンプルコード:
    [chara_move name="yuko" time=100 left=20 top=100 ]

    1.12. [chara_config]

    • グループ: キャラクター操作
    • タイトル: キャラクター操作タグの基本設定
    • 説明:
      • キャラクター操作関連タグ (chara_*) のデフォルトの挙動を設定します。
      • ここで設定した値は、各キャラクター操作タグで対応するパラメータが省略された場合に使用されます。
    • パラメータ:
      • pos_mode: (任意) キャラクター立ち位置の自動調整を行うか (true or false)。 (デフォルト値: "true")
      • effect: (任意) pos_mode や chara_move で位置が変わる際のアニメーション効果。 (デフォルト値: "swing")
      • ptext: (任意) [chara_ptext] が名前を表示する対象となる [ptext] の name。
      • time: (任意) [chara_mod] での表情変更のデフォルト時間 (ミリ秒)。 (デフォルト値: "600")
      • memory: (任意) [chara_hide] 時に表情を記憶するか (true or false)。 (デフォルト値: "false")
      • anim: (任意) pos_mode 有効時に立ち位置変更のアニメーションを行うか (true or false)。 (デフォルト値: "true")
      • pos_change_time: (任意) pos_mode 有効時の立ち位置調整アニメーションの時間 (ミリ秒)。 (デフォルト値: "600")
      • talk_focus: (任意) 発言中キャラのフォーカス演出 (brightness, blur, none)。 (デフォルト値: "none")
      • brightness_value: (任意) talk_focus=brightness 時の非発言者の明度 (0-100)。 (デフォルト値: "60")
      • blur_value: (任意) talk_focus=blur 時の非発言者のぼかし度合い (px)。 (デフォルト値: "2")
      • talk_anim: (任意) 発言開始時のアニメーション (up, down, zoom, none)。 (デフォルト値: "none")
      • talk_anim_time: (任意) talk_anim のアニメーション時間 (ミリ秒)。 (デフォルト値: 230)
      • talk_anim_value: (任意) talk_anim の移動量 (px)。 (デフォルト値: 30)
      • talk_anim_zoom_rate: (任意) talk_anim=zoom 時の拡大率。 (デフォルト値: 1.2)
      • plus_lighter: (任意) キャラクターパーツ合成に mix-blend-mode: plus-lighter; を使用するか (true or false)。使用する場合、パーツ画像はすべて黒背景にする必要があります。 (デフォルト値: "false")
    • 期待される動作:
      1. 指定されたパラメータの値を kag.stat 内の対応するプロパティ (chara_pos_mode, chara_effect など) に設定します。
      2. talk_focus が変更された場合、現在画面に表示されているすべてのキャラクターのフィルタースタイルをリセットします。
      3. 次のタグへ進みます (nextOrder)。

    2. メッセージ・テキスト関連タグ

    2.1. [font]

    • グループ: メッセージ関連の設定
    • タイトル: テキストスタイルの変更
    • 説明:
      • 現在のメッセージレイヤにおけるテキストの表示スタイル(フォントサイズ、色、太字、縁取りなど)を変更します。
      • 変更されたスタイルは、次に [resetfont], [cm], [ct], [er] タグなどが実行されるまで有効です。
      • デフォルトのスタイルに戻すには [resetfont] を使用します。
      • パラメータを省略した場合、そのスタイル項目は変更されません。
    • パラメータ:
      • size: (任意) 文字サイズ (px)。 (デフォルト値: "")
      • color: (任意) 文字色 (0xRRGGBB形式)。 (デフォルト値: "")
      • bold: (任意) 太字にするか (true または false)。 (デフォルト値: "")
      • italic: (任意) イタリック体にするか (true または false)。 (デフォルト値: "")
      • face: (任意) フォント名。 (デフォルト値: "")
      • edge: (任意) 縁取り色 (0xRRGGBB形式) または none。V515以降は太さも指定可能 (4px 0xFF0000 や 4px 0xFF0000, 2px 0xFFFFFF の形式)。 (デフォルト値: "")
      • edge_method: (任意) 縁取りの実装方式 (shadow or filter)。 (デフォルト値: "")
      • shadow: (任意) 文字影色 (0xRRGGBB形式) または none。edge 指定時は無効。 (デフォルト値: "")
      • effect: (任意) 文字表示アニメーション効果 (fadeIn, rotateIn など) または none。 (デフォルト値: "")
      • effect_speed: (任意) effect の表示時間 (0.2s, 200ms など)。 (デフォルト値: "")
      • gradient: (任意) 文字グラデーション (CSSグラデーション形式) または none。 (デフォルト値: "")
    • 期待される動作:
      1. 現在のメッセージレイヤの current_span を確定させます (必要であれば新しい <span> を挿入します)。
      2. kag.stat.font オブジェクトのプロパティを、指定されたパラメータの値で更新します。
      3. color, edge, shadow は $.convertColor で適切な形式に変換されます。
      4. bold は $.convertBold で bold または normal に変換されます。
      5. italic は $.convertItalic で italic または normal に変換されます。
      6. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [font size=40 bold=true]
    この文字は大きく、そして太字で表示されます。 
    
    [resetfont] 
    もとの大きさに戻りました。

    2.2. [deffont]

    • グループ: メッセージ関連の設定
    • タイトル: デフォルトのテキストスタイル設定
    • 説明:
      • 現在のメッセージレイヤにおける「デフォルト」のテキストスタイルを設定します。
      • ここで設定したスタイルは、[resetfont] タグなどが実行されたときに適用されるようになります。
      • このタグを実行しただけでは、現在表示されているテキストのスタイルは変更されません。
    • パラメータ:
      • size: (任意) デフォルトの文字サイズ (px)。 (デフォルト値: "")
      • color: (任意) デフォルトの文字色 (0xRRGGBB形式)。 (デフォルト値: "")
      • bold: (任意) デフォルトで太字にするか (true または false)。 (デフォルト値: "")
      • italic: (任意) デフォルトでイタリック体にするか (true または false)。 (デフォルト値: "")
      • face: (任意) デフォルトのフォント名。 (デフォルト値: "")
      • edge: (任意) デフォルトの縁取り色 (0xRRGGBB形式) または none。V515以降は太さも指定可能。 (デフォルト値: "")
      • edge_method: (任意) デフォルトの縁取り実装方式 (shadow or filter)。 (デフォルト値: "")
      • shadow: (任意) デフォルトの文字影色 (0xRRGGBB形式) または none。 (デフォルト値: "")
      • effect: (任意) デフォルトの文字表示アニメーション効果 (fadeIn など) または none。 (デフォルト値: "")
      • effect_speed: (任意) デフォルトの effect 表示時間 (0.2s など)。 (デフォルト値: "")
      • gradient: (任意) デフォルトの文字グラデーション (CSSグラデーション形式) または none。 (デフォルト値: "")
    • 期待される動作:
      1. kag.stat.default_font オブジェクトのプロパティを、指定されたパラメータの値で更新します。
      2. color, edge, shadow は $.convertColor で変換されます。
      3. bold は $.convertBold で変換されます。
      4. italic は $.convertItalic で変換されます。
      5. 次のタグへ進みます (nextOrder)。

    2.3. [resetfont]

    • グループ: メッセージ関連の設定

    • タイトル: テキストスタイルのリセット

    • 説明:

      • 現在のメッセージレイヤのテキストスタイルを、[deffont] で設定されたデフォルトスタイルに戻します。
    • パラメータ:

      • next: (任意) false を指定すると、nextOrder を呼び出しません。 (デフォルト値: "true")
    • 期待される動作:

      1. 現在のメッセージレイヤの current_span を確定させます。
      2. kag.stat.font オブジェクトの内容を kag.stat.default_font の内容で上書きします。
      3. pm.next が "false" でない場合、次のタグへ進みます (nextOrder)。
    • サンプルコード:

      [deffont size=30]
      デフォルトの文字サイズ[p]
      
      [font size=55 bold=true]
      うおおおおおおおおおお!!![p]
      
      [resetfont]
      い、いきなりなんだよ!
      [font size=20](びっくりした…)[p]
      
      [resetfont]

    2.4. [style]

    • (非推奨/未実装?)
    • 説明: (コメントやコードからは具体的な機能が不明。スタイル関連と思われるが詳細は要調査。)

    2.5. [deletestyle]

    • (非推奨/未実装?)
    • 説明: (コメントやコードからは具体的な機能が不明。[style] で設定したものを削除すると思われるが詳細は要調査。)

    2.6. [message_config]

    • グループ: メッセージ関連の設定

    • タイトル: メッセージコンフィグ

    • 説明: (V515以降)

      • メッセージ表示に関する詳細な設定を変更します。
      • 文字表示速度、縁取りの重なり、カギカッコの処理、禁則処理などを制御できます。
    • パラメータ:

      • ch_speed_in_click: (任意) クリック割り込み後の文字表示速度(ミリ秒/文字)。defaultで変更なし。 (デフォルト値: "1")
      • effect_speed_in_click: (任意) クリック割り込み後の文字エフェクト速度(msまたはs)。defaultで変更なし。 (デフォルト値: "100ms")
      • edge_overlap_text: (任意) 縁取りを前の文字に重ねるか (true or false)。stroke縁取り時のみ有効。 (デフォルト値: "true")
      • speech_bracket_float: (任意) 開始カギカッコを左にずらすか (true, false, 数値(pxなど))。 (デフォルト値: "false")
      • speech_margin_left: (任意) speech_bracket_float有効時にテキスト全体を右にずらすか (true, false, 数値(pxなど))。 (デフォルト値: "false")
      • kerning: (任意) 字詰めを行うか (true or false)。 (デフォルト値: "false")
      • add_word_nobreak: (任意) ワードブレイク禁止単語をカンマ区切りで追加。
      • remove_word_nobreak: (任意) ワードブレイク禁止単語をカンマ区切りで削除。
      • line_spacing: (任意) 行間 (px)。 (デフォルト値: "")
      • letter_spacing: (任意) 字間 (px)。 (デフォルト値: "")
      • control_line_break: (任意) 手動で禁則処理を行うか (true or false)。 (デフォルト値: "false")
      • control_line_break_chars: (任意) 行頭禁則文字。 (デフォルト値: "、。)」』】,.)]")
    • 期待される動作:

      1. 現在のメッセージレイヤの current_span を確定させます。
      2. kag.stat.message_config オブジェクトを必要なら初期化します。
      3. 指定されたパラメータのうち、デフォルトコンフィグ(default_message_config)に存在するキーの値を kag.stat.message_config に格納します。
      4. kag.stat.word_nobreak_list を必要なら初期化します。
      5. add_word_nobreak が指定されていれば、単語リストに追加します(重複は避ける)。
      6. remove_word_nobreak が指定されていれば、単語リストから削除します。
      7. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      ;クリックされても文字表示速度を変更しない
      [message_config ch_speed_in_click="default" effect_speed_in_click="default"]
      
      ;クリックされたら残りを瞬間表示
      [message_config ch_speed_in_click="0" effect_speed_in_click="0ms"]
      
      ;セリフの先頭のカギカッコだけを左側にずらして、カギカッコの下に文章が回り込まないようにする
      [message_config speech_bracket_float="true"]
      
      ;"――"はワードブレイクされてほしくない
      [message_config add_word_nobreak="――"]
      
      ;行間も字間もめちゃくちゃ広げてみる
      [message_config line_spacing="50" letter_spacing="30"]
      
      ;ダッシュの字間を詰めてみる
      @macro name="――"
        [message_config letter_spacing="-4"]―[message_config letter_spacing="0"]―
      @endmacro
      ――力が欲しいか?[l][r]
      [――]力が欲しいか?[l][r]

    2.7. [ruby]

    • グループ: メッセージ・テキスト
    • タイトル: ルビを振る
    • 説明:
      • このタグの直後に書かれる1文字に対して、ルビを振ります。
      • 複数の文字にルビを振る場合は、文字ごとにこのタグを記述する必要があります。
    • パラメータ:
      • text: (必須) ルビとして表示する文字列。
    • 期待される動作:
      1. kag.stat.ruby_str に pm.text の値を格納します。
      2. 次のタグへ進みます (nextOrder)。
    • サンプルコード: tyranoscript [ruby text="かん"]漢[ruby text="じ"]字

    2.8. [mark]

    • グループ: メッセージ・テキスト

    • タイトル: テキストマーカー

    • 説明:

      • このタグから [endmark] タグまでのテキストに、蛍光ペンのようなマーカー効果を適用します。
    • パラメータ:

      • color: (任意) マーカーの色 (0xRRGGBB形式)。 (デフォルト値: "0xFFFF00")
      • font_color: (任意) マーカー部分の文字色 (0xRRGGBB形式)。省略時は現在の文字色。 (デフォルト値: "")
      • size: (任意) マーカーの高さの割合 (0-100)。50で文字の下半分。 (デフォルト値: "")
    • 期待される動作:

      1. kag.stat.mark を 1 に設定します。
      2. kag.stat.style_mark に、指定された color, font_color, size に基づくインラインCSS文字列を生成して格納します。
      3. size が指定された場合は background: linear-gradient(...) を使用します。
      4. padding-top, padding-bottom を追加します。
      5. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      ここはまだです。[mark]ここにマーカーがひかれています。[endmark]ここはひかれません。
      
      [mark color="0xff7f50" size=70]マーカーの色やサイズを指定することもできます。[endmark]

    2.9. [endmark]

    • グループ: メッセージ・テキスト

    • タイトル: テキストマーカー終了

    • 説明:

      • [mark] タグで開始したテキストマーカー効果を終了します。
    • パラメータ: (なし)

    • 期待される動作:

      1. kag.stat.mark が 1 ならば 2 に設定します (次の文字からマーカーを解除するため)。
      2. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      ここはまだです。[mark]ここにマーカーがひかれています。[endmark]ここはひかれません。
      
      [mark color="0xff7f50" size=70 ]マーカーの色やサイズを指定することもできます。[endmark]

    2.10. [text]

    • グループ: (内部的)
    • タイトル: テキストの表示処理
    • 説明:
      • シナリオファイル内のテキストや、[emb] タグなどで評価された文字列を表示するための内部的なタグです。通常、シナリオファイルに直接記述することはありません。
      • メッセージウィンドウにテキストを追加し、1文字ずつ表示するアニメーションを実行します。
    • パラメータ:
      • val: (必須) 表示するテキスト文字列。
      • backlog: (任意) バックログへの追加方法 (add または join)。 (デフォルト値: "add")
    • 期待される動作:
      1. スクリプト(iscript)またはHTML(html)解析中の場合は、それぞれのバッファに文字列を追加して nextOrder を呼び、処理を終了します。
      2. メッセージレイヤのインナー要素 (.message_inner) を取得します。
      3. インナー要素にCSSスタイル (字間、行間、フォントなど) を適用します。
      4. 現在表示中の文字列 (kag.stat.current_message_str) を更新します。
      5. 自動改ページ処理 (autoInsertPageBreak) を実行します (コンフィグで有効な場合)。
      6. showMessage メソッドを呼び出して、以下の処理を実行します。
        • 発言者名を取得します。
        • バックログにテキストを追加します (pushTextToBackLog)。
        • 読み上げが有効なら読み上げます (speechMessage)。
        • 表示するテキスト文字列(pm.val)からHTML(<span>)要素を生成します (buildMessageHTML)。ルビやマーカーもここで処理されます。
        • 生成したHTMLを現在の current_span に追加します。
        • ふきだしが有効ならサイズを調整します (adjustFukiSize)。
        • 1文字ずつ表示するアニメーションを開始します (addChars)。
          • アニメーション中は kag.stat.is_adding_text が true になります。
          • スキップまたはクリック割り込みを監視します (checkClickInterrupt)。
          • 全文字表示完了後、finishAddingChars を呼び出して is_adding_text を false にし、nextOrder を実行します。

    2.11. [r]

    • グループ: メッセージ・テキスト
    • タイトル: 改行
    • 説明:
      • 現在のメッセージレイヤに改行 (<br>) を挿入します。
    • パラメータ: (なし)
    • 期待される動作:
      1. 現在の current_span に <br> タグを追加します。
      2. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    テキスト表示[l] 
    改行します[l][r] 
    改行します[l][r]

    2.12. [l]

    • グループ: メッセージ・テキスト
    • タイトル: クリック待ち
    • 説明:
      • プレイヤーのクリックまたは入力待ち状態になります。
      • クリックされるまでシナリオの進行が停止します。
      • メッセージの末尾にクリック待ちグリフが表示されます。
    • パラメータ: (なし)
    • 期待される動作:
      1. クリック待ちグリフを表示します (showNextImg)。
      2. スキップモード (is_skip == true) の場合は、即座に nextOrder を呼び出して次のタグへ進みます。
      3. オートモード (is_auto == true) の場合は、設定された待機時間 (autoSpeed + 文字数に応じた追加時間) の後に nextOrder を呼び出します。ただし、ボイス再生中 (is_vo_play == true) の場合はボイス再生終了後に進むようにフラグ (is_vo_play_wait = true) を立てます。
      4. スキップでもオートでもない場合は、イベントレイヤを表示し、クリック/入力を待ち受けます (waitClick("l"))。クリックされると nextOrder が呼ばれます。
    • サンプルコード:
    テキスト表示[l] 
    テキスト表示[l][r]

    2.13. [p]

    • グループ: メッセージ・テキスト
    • タイトル: クリック待ち+改ページ
    • 説明:
      • [l] タグと同様にクリック待ちを行いますが、クリックされるとメッセージレイヤの内容がクリアされる「改ページ」動作を伴います。
    • パラメータ: (なし)
    • 期待される動作:
      1. 改ページフラグ (kag.stat.flag_ref_page = true) を立てます。これにより、次に [text] タグなどが実行される際にメッセージレイヤがクリアされます。
      2. 以降の動作は [l] タグと同じです(グリフ表示、スキップ/オート処理、クリック待ち)。
    • サンプルコード:
    テキスト表示[p] 
    テキスト表示[p][r]

    2.14. [graph]

    • グループ: メッセージ・テキスト

    • タイトル: インライン画像表示

    • 説明:

      • メッセージテキストの途中に画像を表示します。絵文字のような表現に使用できます。
    • パラメータ:

      • storage: (必須) 表示する画像ファイル名。data/image フォルダから読み込まれます。
    • 期待される動作:

      1. 現在のメッセージレイヤのインナー要素 (.message_inner) を取得します。
      2. 現在の current_span の内容 (innerHTML) を取得します。
      3. 画像パスを構築します (./data/image/ + storage)。HTTP URLの場合はそのまま使用します。
      4. <img> タグを生成し、現在の current_span の内容の後ろに追加します (appendMessage)。
      5. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      ;heart.png はハートマークの画像
      [macro name="heart"]
      [graph storage="heart.png"]
      [endmacro]
      
      ;以後、[heart] タグでハートマークを使用可能
      大好き[heart][p]

    2.15. [er]

    • グループ: メッセージ・テキスト
    • タイトル: メッセージレイヤの文字の消去
    • 説明:
      • 現在操作対象となっているメッセージレイヤの表示内容(テキストやグラフィックボタンなど)をすべて消去します。
      • 同時に、そのレイヤのフォントスタイルをデフォルトに戻します (resetfont と同じ動作)。
    • パラメータ: (なし)
    • 期待される動作:
      1. クリック待ちグリフを非表示にします (hideNextImg)。
      2. 現在のメッセージレイヤのインナー要素 (.message_inner) の内容を空にします (html(""))。
      3. [resetfont] タグを実行します。これによりフォントスタイルがデフォルトに戻り、nextOrder が呼び出されます。
    • サンプルコード:
    クリックするとメッセージがクリアされます[l][er]
    
    クリアされました[l]

    2.16. [cm]

    • グループ: メッセージ・テキスト
    • タイトル: すべてのメッセージレイヤのクリア
    • 説明:
      • すべてのメッセージレイヤの内容(テキスト)を消去します。
      • フリーレイヤの内容([button], [glink], [html] などで表示された要素)も消去します。
      • 現在のメッセージレイヤのフォントスタイルをデフォルトに戻します (resetfont と同じ動作)。
      • 操作対象のメッセージレイヤは変更されません。
    • パラメータ:
      • next: (任意) false を指定すると、nextOrder を呼び出しません。 (デフォルト値: "true")
    • 期待される動作:
      1. クリック待ちグリフを非表示にします (hideNextImg)。
      2. Vchatモードが有効な場合、[vchat_in] を実行して新しい入力欄を用意します。
      3. Vchatモードが無効な場合、すべてのメッセージレイヤのインナー要素の内容を空にします (clearMessageInnerLayerAll)。
      4. バックログの連結フラグを解除し、次回ログ追加時に改行されるようにします (log_clear = true)。
      5. フリーレイヤの内容を空にし、非表示にします (html("").hide())。
      6. [resetfont] タグを実行します。pm.next は引き継がれます。
    • サンプルコード:
    テキスト表示[l] 
    
    画面クリアする[l][cm] 
    
    もう一度画面クリアする[l][cm]

    2.17. [ct]

    • グループ: メッセージ・テキスト
    • タイトル: メッセージレイヤのリセット
    • 説明:
      • すべてのメッセージレイヤの内容(テキスト)を消去します。
      • フリーレイヤの内容([button], [glink], [html] などで表示された要素)も消去します。
      • 現在のメッセージレイヤのフォントスタイルをデフォルトに戻します。
      • 操作対象のメッセージレイヤを message0 の表ページ (fore) に変更します。
    • パラメータ: (なし)
    • 期待される動作:
      1. クリック待ちグリフを非表示にします (hideNextImg)。
      2. すべてのメッセージレイヤのインナー要素の内容を空にします (clearMessageInnerLayerAll)。
      3. フリーレイヤの内容を空にし、非表示にします (html("").hide())。
      4. 操作対象レイヤを message0 に、ページを fore に設定します (kag.stat.current_layer, kag.stat.current_page)。
      5. [resetfont] タグを実行します。
    • サンプルコード:
    テキスト表示[l] 
    
    画面リセットする[l][ct] 
    
    もう一度画面リセットする[l][ct]

    2.18. [current]

    • グループ: メッセージ・テキスト
    • タイトル: 操作対象のメッセージレイヤの指定
    • 説明:
      • テキスト表示やフォント変更などの操作対象となるメッセージレイヤを指定します。
    • パラメータ:
      • layer: (任意) 操作対象とするメッセージレイヤ名 (message0, message1 など)。省略時は現在のレイヤ。 (デフォルト値: "")
      • page: (任意) 操作対象とするページ (fore または back)。 (デフォルト値: "fore")
    • 期待される動作:
      1. pm.layer が指定されていれば、kag.stat.current_layer を更新します。
      2. pm.page が指定されていれば、kag.stat.current_page を更新します。
      3. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [current layer="message0"] 
    message0レイヤに表示されています[l] 
    
    [current layer="message1"] 
    message1レイヤに表示されています[l]

    2.19. [position]

    • グループ: メッセージ関連の設定
    • タイトル: メッセージウィンドウの属性変更
    • 説明:
      • メッセージウィンドウ(アウターおよびインナー)の表示位置、サイズ、色、透明度、余白、枠線、背景画像などを変更します。
    • パラメータ:
      • layer: (任意) 対象のメッセージレイヤ名。 (デフォルト値: "message0")
      • page: (任意) 対象のページ (fore または back)。 (デフォルト値: "fore")
      • left, top, width, height: (任意) アウター要素のCSSプロパティ (px)。
      • frame: (任意) アウター要素の背景画像ファイル。data/image フォルダから読み込みます。noneで標準枠。
      • color: (任意) アウター要素の背景色 (0xRRGGBB形式)。frame指定時は無効。
      • border_color: (任意) アウター要素の枠線の色 (0xRRGGBB形式)。
      • border_size: (任意) アウター要素の枠線の太さ (px)。0で枠線なし。
      • opacity: (任意) アウター要素の不透明度 (0-255)。
      • radius: (任意) アウター要素の角丸半径 (px)。
      • marginl, margint, marginr, marginb: (任意) インナー要素のパディング (px)。marginr, marginb はふきだし時の計算にも使用されます。
      • margin: (任意) インナー要素のパディングを一括指定 (px)。カンマ区切りで方向別指定も可 (上下,左右 など)。
      • vertical: (任意) 縦書きにするか (true or false)。kag.stat.vertical を更新します。
      • visible: (任意) レイヤを表示するか (true or false)。
      • gradient: (任意) アウター要素の背景グラデーション (CSSグラデーション形式)。frame, color より優先。
      • next: (任意) false を指定すると nextOrder を呼び出しません。 (デフォルト値: "true")
    • 期待される動作:
      1. 対象のメッセージレイヤ要素 (j_message_layer)、アウター要素 (j_message_outer)、インナー要素 (j_message_inner) を取得します。
      2. visible が指定されていれば、レイヤの表示/非表示を切り替えます (showLayer/hideLayer)。
      3. 指定されたパラメータに基づき、アウター要素のCSSスタイルを更新します (left, top, width, height, color, opacity, frame, radius, border, gradient)。
      4. アウター要素のスタイル情報を kag.stat.fuki.def_style に保存します。
      5. [position_filter] が適用されている場合、フィルター要素のスタイルもアウターに合わせて更新します。
      6. インナー要素のスタイルをリフレッシュします (refMessageLayer)。これによりインナーはアウターの10px内側に配置されます。
      7. vertical が指定されていれば、kag.stat.vertical を更新し、インナー内の <p> 要素に vertical_text クラスを追加/削除します。
      8. 指定された margin 関連のパラメータに基づき、インナー要素の padding スタイルを更新します。
      9. kag.stat.fuki.marginr, kag.stat.fuki.marginb を更新します。
      10. インナー要素のスタイル情報を kag.stat.fuki.def_style_inner に保存します。
      11. pm.next が "false" でない場合、次のタグへ進みます (nextOrder)。
    • サンプルコード:
    ;メッセージウィンドウの位置とサイズを変更 
    [position width=400 height=300 top=100 left=20] 
    
    ;メッセージウィンドウの色と透明度を変更 [
    position color=blue opacity=100]

    2.20. [fuki_start]

    • グループ: メッセージ・テキスト
    • タイトル: メッセージレイヤをふきだし化する
    • 説明:
      • 指定したメッセージレイヤをふきだし表示モードに切り替えます。
      • このタグを実行する前に、[fuki_chara] タグでキャラクターごとのふきだし設定を行っておく必要があります。
      • ふきだし表示中は、キャラクター名表示欄 (chara_ptext で指定した領域) が非表示になります。
    • パラメータ:
      • layer: (任意) ふきだし化するメッセージレイヤ名。 (デフォルト値: "message0")
      • page: (任意) 対象ページ (fore または back)。 (デフォルト値: "fore")
    • 期待される動作:
      1. kag.stat.fuki.active を true に設定します。
      2. 対象メッセージレイヤのアウター要素 (.message_outer) に fuki_box クラスを追加します。
      3. インナー要素 (.message_inner) の width, height をリセットし、box-sizing を content-box に設定します。
      4. 次のタグへ進みます (nextOrder)。

    2.21. [fuki_stop]

    • グループ: メッセージ・テキスト
    • タイトル: メッセージレイヤのふきだし化を無効にする
    • 説明:
      • ふきだし表示モードを終了し、通常のメッセージウィンドウ表示に戻します。
      • メッセージレイヤのスタイルは [fuki_start] を実行する前の状態に戻ります。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.stat.fuki.active を false に設定します。
      2. 現在のアウター要素から fuki_box クラスを削除します。
      3. アウター要素のスタイルを kag.stat.fuki.def_style に保存されているスタイルに戻します。
      4. インナー要素のスタイルを kag.stat.fuki.def_style_inner に保存されているスタイルに戻し、位置を再計算し、box-sizing を border-box に設定します。
      5. キャラクター名表示欄 (.chara_name_area) を表示します。
      6. 次のタグへ進みます (nextOrder)。

    2.22. [fuki_chara]

    • グループ: メッセージ・テキスト
    • タイトル: ふきだしのキャラクター登録
    • 説明:
      • キャラクターごとに、ふきだしの表示位置、しっぽの形状・位置、サイズ、色などを個別に設定します。
      • name="others" と指定することで、画面上にキャラクターがいない場合のデフォルトのふきだしスタイルを設定できます。
    • パラメータ:
      • name: (必須) 設定対象のキャラクター名、または "others"。
      • left: (任意) ふきだしの左端位置 (キャラ画像の左端からの相対px)。
      • top: (任意) ふきだしの上端位置 (キャラ画像の上端からの相対px)。
      • sippo: (任意) しっぽの向き (top, bottom, left, right, none)。 (デフォルト値: "top")
      • sippo_left: (任意) しっぽの左端からの位置 (px)。sippoがtop/bottomの場合に有効。 (デフォルト値: "40")
      • sippo_top: (任意) しっぽの上端からの位置 (px)。sippoがleft/rightの場合に有効。 (デフォルト値: "40")
      • sippo_width: (任意) しっぽの幅 (px)。 (デフォルト値: "12")
      • sippo_height: (任意) しっぽの高さ (px)。 (デフォルト値: "20")
      • max_width: (任意) ふきだしの最大横幅 (px)。自動調整時の上限。 (デフォルト値: "300")
      • fix_width: (任意) ふきだしの横幅を固定する場合に指定 (px)。 (デフォルト値: "")
      • color: (任意) ふきだしの背景色 (0xRRGGBB形式)。 (デフォルト値: "")
      • border_color: (任意) ふきだしの枠線色 (0xRRGGBB形式)。 (デフォルト値: "")
      • border_size: (任意) ふきだしの枠線太さ (px)。 (デフォルト値: "")
      • opacity: (任意) ふきだしの不透明度 (0-255)。 (デフォルト値: "")
      • radius: (任意) ふきだしの角丸半径 (px)。 (デフォルト値: "")
      • font_color: (任意) ふきだし内の文字色 (0xRRGGBB形式)。 (デフォルト値: "")
      • font_size: (任意) ふきだし内の文字サイズ (px)。 (デフォルト値: "")
    • 期待される動作:
      1. name="others" の場合、kag.stat.fuki.others_style オブジェクトを指定されたパラメータで更新します。
      2. キャラクター名を指定した場合、
        • kag.stat.charas[pm.name] を参照します。存在しない場合はエラーとなります。
        • キャラクター定義内の fuki オブジェクトを指定されたパラメータで更新します。
      3. パラメータのうち、色が指定されていないものは削除され、デフォルトスタイルが適用されるようにします。
      4. 次のタグへ進みます (nextOrder)。

    2.23. [nolog]

    • グループ: メッセージ関連の設定
    • タイトル: バックログ記録の一時停止
    • 説明:
      • このタグ以降、[endnolog] タグが現れるまでのテキスト表示がバックログに記録されなくなります。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.stat.log_write を false に設定します。
      2. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    ここはログに記録される[p] 
    
    [nolog] 
    
    ログに記録されない[p] 
    
    ここもログに記録されない[p] 
    
    [endnolog] 
    
    ここから、ログ記録再開[p]

    2.24. [endnolog]

    • グループ: メッセージ関連の設定
    • タイトル: バックログ記録の再開
    • 説明:
      • [nolog] タグで一時停止したバックログへの記録を再開します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.stat.log_write を true に設定します。
      2. 次のタグへ進みます (nextOrder)。

    2.25. [pushlog]

    • グループ: メッセージ関連の設定
    • タイトル: バックログにテキスト追加
    • 説明:
      • 任意のテキスト文字列をバックログに追加します。
      • [mtext] など、通常ではバックログに残らないテキストの内容を記録したい場合に使用します。
    • パラメータ:
      • text: (必須) バックログに追加するテキスト文字列。
      • join: (任意) 直前のログに連結するか (true or false)。 (デフォルト値: "false")
    • 期待される動作:
      1. kag.pushBackLog(pm.text, join_type) を呼び出してバックログにテキストを追加します。join_type は pm.join の値に応じて "join" または "add" となります。
      2. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [pushlog text="ここに好きなログ文字列を記述できます"]

    2.26. [configdelay]

    • グループ: メッセージ関連の設定
    • タイトル: デフォルトの文字の表示速度の設定
    • 説明:
      • デフォルトの文字表示速度を設定します。
      • コンフィグ画面などで使用し、設定値はシステム変数 sf._config_ch_speed に保存されます。
      • [delay] タグとは異なり、このタグで設定した速度は [resetdelay] で復元される対象となります。
    • パラメータ:
      • speed: (任意) デフォルトの文字表示速度 (ミリ秒/文字)。 (デフォルト値: "")
    • 期待される動作:
      1. pm.speed が指定されている場合:
        • kag.stat.ch_speed を空文字列に設定します (現在の速度をリセット)。
        • kag.config.chSpeed を pm.speed で更新します。
        • [eval] タグを内部的に呼び出し、sf._config_ch_speed に pm.speed の値を保存します。
      2. pm.speed が指定されていない場合は、そのまま次のタグへ進みます (nextOrder)。

    2.27. [delay]

    • グループ: メッセージ関連の設定
    • タイトル: 文字の表示速度の設定
    • 説明:
      • 一時的に文字の表示速度を変更します。
      • このタグで設定した速度は、[resetdelay] タグでデフォルト速度に戻すことができます。
    • パラメータ:
      • speed: (任意) 文字表示速度 (ミリ秒/文字)。 (デフォルト値: "")
    • 期待される動作:
      1. pm.speed が指定されている場合、kag.stat.ch_speed を parseInt(pm.speed) で更新します。
      2. 次のタグへ進みます (nextOrder)。

    2.28. [resetdelay]

    • グループ: メッセージ関連の設定
    • タイトル: 文字の表示速度をデフォルトに戻す
    • 説明:
      • [delay] タグで変更した文字表示速度を、デフォルトの値(Config.tjs または [configdelay] で設定された値)に戻します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.stat.ch_speed を空文字列に設定します。これにより、次回テキスト表示時には kag.config.chSpeed が参照されるようになります。
      2. 次のタグへ進みます (nextOrder)。

    2.29. [nowait]

    • グループ: メッセージ関連の設定
    • タイトル: テキスト瞬間表示モードの開始
    • 説明:
      • テキストを1文字ずつ表示するのではなく、一瞬で全文を表示するモードを開始します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.stat.is_nowait を true に設定します。
      2. 次のタグへ進みます (nextOrder)。

    2.30. [endnowait]

    • グループ: メッセージ関連の設定
    • タイトル: テキスト瞬間表示モードの停止
    • 説明:
      • [nowait] タグで開始したテキスト瞬間表示モードを終了します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.stat.is_nowait を false に設定します。
      2. 次のタグへ進みます (nextOrder)。

    2.31. [config_record_label]

    • グループ: メッセージ関連の設定
    • タイトル: 既読管理の設定
    • 説明:
      • 既読テキストの色や、未読テキストのスキップ可否を設定します。
    • パラメータ:
      • color: (任意) 既読テキストの色 (0xRRGGBB形式)。 (デフォルト値: "")
      • skip: (任意) 未読テキストをスキップ可能にするか (true or false)。 (デフォルト値: "")
    • 期待される動作:
      1. pm.color が指定されていれば、kag.config.alreadyReadTextColor を更新し、システム変数 sf._system_config_already_read_text_color に保存します。
      2. pm.skip が指定されていれば、kag.config.unReadTextSkip を更新し、システム変数 sf._system_config_unread_text_skip に保存します。
      3. 次のタグへ進みます (nextOrder)。

    3. 画像・背景・レイヤ操作関連タグ

    3.1. [image]

    • グループ: 画像・背景・レイヤ操作

    • タイトル: 画像を表示

    • 説明:

      • 指定したレイヤに画像を追加します。背景レイヤ(base)または前景レイヤ(0以上の整数)を指定できます。
      • 前景レイヤはデフォルトで非表示のため、visible="true" を指定するか、事前に [layopt] で表示状態にする必要があります。
    • パラメータ:

      • storage: (必須) 画像ファイル名。背景レイヤなら data/bgimage、前景レイヤなら data/fgimage から読み込みます。folder で変更可。
      • layer: (任意) 画像を追加するレイヤ名 (base, 0, 1, …)。 (デフォルト値: "base")
      • page: (任意) 対象ページ (fore または back)。 (デフォルト値: "fore")
      • visible: (任意) true を指定すると、対象レイヤを表示状態にします (layerがbase以外の場合)。 (デフォルト値: "")
      • left, x: (任意) 画像の左端位置 (px)。x が優先。 (デフォルト値: "")
      • top, y: (任意) 画像の上端位置 (px)。y が優先。 (デフォルト値: "")
      • width: (任意) 画像の表示横幅 (px)。 (デフォルト値: "")
      • height: (任意) 画像の表示高さ (px)。 (デフォルト値: "")
      • folder: (任意) 画像を読み込むフォルダ。デフォルトは layer に応じて bgimage または fgimage。
      • name: (任意) 画像要素に name 属性値を設定します。 (デフォルト値: "")
      • time: (任意) フェードイン時間 (ミリ秒)。0または空で瞬間表示。 (デフォルト値: "")
      • wait: (任意) フェードイン完了を待つか (true or false)。 (デフォルト値: "true")
      • zindex: (任意) 重ね順。数値が大きいほど前面。 (デフォルト値: "1")
      • depth: (任意) zindex が同じ場合の重ね順 (front または back)。 (デフォルト値: "front")
      • reflect: (任意) 左右反転するか (true or false)。 (デフォルト値: "")
      • pos: (任意) キーワードで位置を指定 (left, lc, c, rc, right)。Config.tjs の scPositionX を参照。layerがbase以外の場合のみ有効。 (デフォルト値: "")
      • animimg: (任意) アニメーション画像(GIF/APNG)を最初から再生するか (true or false)。 (デフォルト値: "")
    • 期待される動作:

      1. 前景レイヤ (layer が base 以外) の場合:
        • visible="true" なら対象レイヤを表示状態にします。
        • pos が指定されていれば、キーワードから left の値を決定します。
        • 画像パス (storage_url) を構築します (folder を考慮)。
        • <img> (SVGの場合は <object>) 要素 (img_obj) を生成します。
        • CSS スタイル (position, top, left, width, height, zindex) を適用します。
        • reflect="true" なら reflect クラスを追加します。
        • animimg="true" なら、画像のURLに ?count=数値 を追加してキャッシュを回避し、イベント(remove)を設定します。
        • name があれば設定します。
        • time が指定されている場合 (フェードイン):
          • 画像を透明状態 (opacity:0) でレイヤに追加します (depth に応じて prepend/append)。
          • .animate({opacity:1}) でフェードインさせます。
          • 完了後、wait=true なら nextOrder を呼び出します。
        • time が指定されていない場合 (瞬間表示):
          • 画像をレイヤに追加します。
          • nextOrder を呼び出します。
        • wait=false の場合は、アニメーション開始と同時に nextOrder を呼び出します。
      2. 背景レイヤ (layer が base) の場合:
        • 画像パス (storage_url) を構築します (folder を考慮)。
        • 対象レイヤ (base, fore または back) の background-image スタイルを設定します。
        • position が指定されていれば、background-size: cover と background-position を設定します。
        • nextOrder を呼び出します。
    • サンプルコード:

      ;レイヤ1を表示状態に
      [layopt layer="1" visible="true"]
      ;レイヤ1にcat.pngを追加
      [image layer="1" x="150" y="150" storage="cat.png"]
      [l]
      
      ;画像を削除
      [freeimage layer="1"]

    3.2. [freeimage], [freelayer]

    • グループ: 画像・背景・レイヤ操作

    • タイトル: レイヤのクリア

    • 説明:

      • 指定したレイヤの内容(画像やテキストなど)をすべて削除します。
      • [freelayer] は [freeimage] の別名です。
    • パラメータ:

      • layer: (必須) クリアするレイヤ名 (base, 0, 1, …, message0, …)。
      • page: (任意) 対象ページ (fore または back)。 (デフォルト値: "fore")
      • time: (任意) フェードアウト時間 (ミリ秒)。0または空で瞬間削除。 (デフォルト値: "")
      • wait: (任意) フェードアウト完了を待つか (true or false)。 (デフォルト値: "true")
    • 期待される動作:

      1. 前景レイヤまたはメッセージレイヤの場合:
        • time が指定されている場合:
          • 対象レイヤの子要素を取得します。要素がなければ nextOrder を呼び出して終了します。
          • 子要素を .animate({opacity:0}) でフェードアウトさせます。
          • 完了後、レイヤの内容を空にし (empty())、wait=true なら nextOrder を呼び出します。
        • time が指定されていない場合:
          • 対象レイヤの内容を空にします (empty())。
          • nextOrder を呼び出します。
        • wait=false の場合は、フェードアウト開始と同時に nextOrder を呼び出します。
      2. 背景レイヤ (layer が base) の場合:
        • 対象レイヤの background-image スタイルを空にします。
        • nextOrder を呼び出します。
    • サンプルコード:

      ;イメージを配置
      [image layer="0" page="fore" visible="true" top="100" left="300"  storage="chara.png"]
      
      ;レイヤをクリア
      [freeimage layer="0"]

    3.3. [free]

    • グループ: 画像・背景・レイヤ操作

    • タイトル: オブジェクトの解放

    • 説明:

      • 指定したレイヤ内にある、指定した name 属性を持つ要素をすべて削除します。
    • パラメータ:

      • layer: (必須) 対象のレイヤ名。
      • name: (必須) 削除する要素の name。
      • page: (任意) 対象ページ (fore または back)。 (デフォルト値: "fore")
      • time: (任意) フェードアウト時間 (ミリ秒)。0または空で瞬間削除。 (デフォルト値: "")
      • wait: (任意) フェードアウト完了を待つか (true or false)。 (デフォルト値: "true")
    • 期待される動作:

      1. 対象レイヤ要素 (j_layer) を取得します。
      2. j_layer.find("." + pm.name) で対象要素 (j_obj) を取得します。
      3. time が指定されている場合:
        • j_obj が存在しなければ nextOrder を呼び出して終了します。
        • j_obj.animate({opacity:0}) でフェードアウトさせます。
        • 完了後、j_obj.remove() で要素を削除し、wait=true なら nextOrder を呼び出します。
      4. time が指定されていない場合:
        • j_obj.remove() で要素を削除します。
        • nextOrder を呼び出します。
      5. wait=false の場合は、フェードアウト開始と同時に nextOrder を呼び出します。
    • サンプルコード:

      ;名前を指定してイメージを配置
      [image name="myimg" layer="0" visible="true" top="100" left="300"  storage="myimg.png"]
      
      ;イメージの名前を指定して1つだけ消す
      [free name="myimg" layer="0"]

    3.4. [ptext]

    • グループ: メッセージ・テキスト
    • タイトル: レイヤにテキストを表示
    • 説明:
      • 指定した前景レイヤまたはfixレイヤにテキストを表示します。メッセージウィンドウとは独立して画面上に文字を表示したい場合に使用します。
      • [free] や [freeimage] で削除する必要があります。
    • パラメータ:
      • layer: (必須) テキストを表示するレイヤ (0以上の整数、または fix)。
      • x: (必須) テキストの左端位置 (px)。
      • y: (必須) テキストの上端位置 (px)。
      • page: (任意) 対象ページ (fore または back)。 (デフォルト値: "fore")
      • text: (任意) 表示するテキスト文字列。 (デフォルト値: "")
      • vertical: (任意) 縦書きにするか (true or false)。 (デフォルト値: "false")
      • size: (任意) フォントサイズ (px)。省略時はデフォルトフォントサイズ。 (デフォルト値: "")
      • face: (任意) フォント名。省略時はデフォルトフォント。 (デフォルト値: "")
      • color: (任意) 文字色 (0xRRGGBB形式)。省略時はデフォルト色。 (デフォルト値: "")
      • bold: (任意) 太字にするか (true or false)。 (デフォルト値: "")
      • italic: (任意) イタリック体にするか (true or false)。 (デフォルト値: "")
      • edge: (任意) 縁取り色 (0xRRGGBB形式) または none。V515以降は太さも指定可能。 (デフォルト値: "")
      • shadow: (任意) 文字影色 (0xRRGGBB形式) または none。edge 指定時は無効。 (デフォルト値: "")
      • name: (任意) テキスト要素に name 属性値を設定します。 (デフォルト値: "")
      • width: (任意) テキスト表示領域の横幅 (px)。 (デフォルト値: "")
      • align: (任意) 横方向の文字揃え (left, center, right)。width 指定時のみ有効。 (デフォルト値: "left")
      • time: (任意) フェードイン時間 (ミリ秒)。0または空で瞬間表示。 (デフォルト値: "")
      • zindex: (任意) 重ね順。 (デフォルト値: "9999")
      • overwrite: (任意) 同名の要素が存在する場合に内容を上書きするか (true or false)。 (デフォルト値: "false")
      • gradient: (任意) 文字グラデーション (CSSグラデーション形式) または none。 (デフォルト値: "")
    • 期待される動作:
      1. overwrite=true かつ同名の要素が存在する場合:
        • 既存要素のテキスト内容 (updatePText)、位置、色、サイズを更新します。
        • nextOrder を呼び出して終了します。
      2. フォント関連のパラメータが未指定の場合、kag.stat.font からデフォルト値を補完します。
      3. <p> 要素 (tobj) を生成します。
      4. CSS スタイル (position, top, left, width, text-align, font, color, edge, shadow, gradient) を適用します。
      5. vertical="true" なら vertical_text クラスを追加します。
      6. layer="fix" なら fixlayer クラスを追加します。
      7. name があれば設定します。
      8. 個別装飾 (is_individual_decoration) が必要な場合 (edge_method="stroke" など)、イベントハンドラを設定します。
      9. テキスト内容をセットします (updatePText)。個別装飾が必要な場合は、1文字ずつ <span> で囲む処理を行います。
      10. 対象レイヤ (target_layer) を取得します。
      11. time が指定されている場合 (フェードイン):
        • tobj を透明状態 (opacity:0) でレイヤに追加します。
        • .animate({opacity:1}) でフェードインさせます。
        • 完了後、nextOrder を呼び出します。
      12. time が指定されていない場合 (瞬間表示):
        • tobj をレイヤに追加します。
        • nextOrder を呼び出します。
    • サンプルコード:
    [backlay]
    
    [ptext page=back text="テキストテキスト" size=30 x=200 y=300 color=red vertical=true]
    
    [trans time=2000] [wt] [l] 
    
    表示したテキストを消去します 
    
    [freeimage layer=0]

    3.5. [clearfix]

    • グループ: 画像・背景・レイヤ操作

    • タイトル: fixレイヤーのクリア

    • 説明:

      • fixレイヤ([button fix=true] などで要素を追加する特殊な最前面レイヤ)の内容を消去します。
      • name を指定すると、その name を持つ要素のみを削除します。
    • パラメータ:

      • name: (任意) 削除する要素の name。省略するとfixレイヤ全体をクリア。 (デフォルト値: "")
    • 期待される動作:

      1. pm.name が指定されている場合、.fixlayer. + pm.name クラスを持つ要素を削除します (remove())。
      2. pm.name が指定されていない場合、.fixlayer クラスを持つすべての要素を削除します。
      3. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      ;fixレイヤーへの追加
      [ptext name="sample" layer=fix page=fore text="テキストテキスト" size=30 x=200 y=100 color=red ]
      
      ;fixレイヤーのクリア
      [clearfix name="sample"]

    3.6. [backlay]

    • グループ: 画像・背景・レイヤ操作
    • タイトル: レイヤ情報の表ページから裏ページへのコピー
    • 説明:
      • 指定したレイヤ、またはすべてのレイヤの表ページ (fore) の内容(DOM要素とスタイル)を裏ページ (back) にコピーします。
      • [trans] タグと組み合わせて、画面遷移演出に使用します。
    • パラメータ:
      • layer: (任意) コピー対象のレイヤ名。省略するとすべてのレイヤが対象。 (デフォルト値: "")
    • 期待される動作:
      1. 対象となるレイヤを決定します (pm.layer が空なら全レイヤ)。
      2. 各対象レイヤについて:
        • 表ページのjQueryオブジェクト (map_layer_fore[key]) を取得します。
        • 裏ページのクラス名を取得します。
        • 表ページをディープコピー (clone()) して新しい裏ページオブジェクト (map_layer_back[key]) を作成します。
        • 新しい裏ページオブジェクトのクラスを表ページのものから裏ページのものに変更します。
        • 既存の裏ページ要素をDOMから削除します (remove())。
        • 新しい裏ページオブジェクトを非表示 (hide()) にしてDOMに追加します (appendLayer)。
      3. 次のタグへ進みます (nextOrder)。

    3.7. [wt]

    • グループ: 画像・背景・レイヤ操作
    • タイトル: トランジションの終了待ち
    • 説明:
      • 実行中のトランジション ([trans] タグによるもの) が完了するまで待機します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.stat.is_trans が false (トランジション中でない) なら、即座に nextOrder を呼び出します。
      2. kag.stat.is_trans が true (トランジション中) なら、weaklyStop() を呼び出して一時停止します。トランジション完了時に completeTrans が呼ばれ、そこで nextOrder が実行されます。

    3.8. [trans]

    • グループ: 画像・背景・レイヤ操作

    • タイトル: レイヤのトランジション

    • 説明:

      • 指定したレイヤの裏ページ (back) の内容を表ページ (fore) に、指定した時間と効果で切り替えます。
      • 通常、[backlay] タグで準備した裏ページを表示するために使用します。
    • パラメータ:

      • layer: (必須) トランジション対象のレイヤ名。 (デフォルト値: "base")
      • method: (任意) トランジション効果 (fadeIn, crossfade など)。 (デフォルト値: "fadeIn")
      • time: (必須) トランジション時間 (ミリ秒)。 (デフォルト値: 1500)
      • children: (任意) 【廃止】 (デフォルト値: false)
    • 期待される動作:

      1. kag.stat.is_trans を true に設定します。
      2. pm.children が true または pm.layer が空の場合、すべてのレイヤを対象とします。そうでなければ pm.layer のみを対象とします。
      3. 各対象レイヤについて:
        • 表ページ (layer_fore) と裏ページ (layer_back) のjQueryオブジェクトを取得します。
        • メッセージレイヤの場合、visible 属性が "false" ならトランジションを行わず、単に forelay を呼び出して裏を表にコピーし、completeTrans を呼び出します。
        • それ以外の場合、$.trans を呼び出してアニメーションを実行します。
          • 裏ページ (layer_back) を show させます。
          • 完了コールバック内で:
            • forelay(key) を呼び出して裏ページの内容を表ページに完全に反映させます。
            • completeTrans() を呼び出して is_trans フラグを false にし、停止状態なら nextOrder を呼び出します。
      4. 次のタグへ進みます (nextOrder)。この時点ではアニメーションは完了していません。完了を待つには [wt] が必要です。
    • サンプルコード:

      [backlay]
      [image layer=base page=back storage=rouka.jpg]
      [trans time=2000]
      トランジションしてるよ……
      [wt]
      
      [cm]
      トランジションが終わったよ[p]

    3.9. [bg]

    • グループ: 画像・背景・レイヤ操作
    • タイトル: 背景の切り替え
    • 説明:
      • 背景レイヤ (base) の画像を切り替えるための簡易タグです。
      • 常に表ページ (fore) に対して実行されます。
      • トランジション効果も指定できます。
    • パラメータ:
      • storage: (必須) 表示する背景画像ファイル名。data/bgimage から読み込みます。
      • method: (任意) 切り替え効果 (crossfade, fadeIn など)。 (デフォルト値: "crossfade")
      • wait: (任意) 切り替え完了を待つか (true or false)。 (デフォルト値: "true")
      • time: (任意) 切り替え時間 (ミリ秒)。 (デフォルト値: 3000)
      • cross: (任意) クロスフェード方式か (true or false)。falseだと旧背景の上に新背景を重ねます。 (デフォルト値: "false")
      • position: (任意) 背景画像の表示位置 (left, center, right, top, bottom)。指定すると background-size: cover が適用されます。 (デフォルト値: "")
    • 期待される動作:
      1. クリック待ちグリフを隠します (hideNextImg)。
      2. 画像パス (storage_url) を構築します。
      3. 指定された画像をプリロードします (kag.preload)。
      4. プリロード完了後:
        • 現在の背景レイヤ (base, fore) のjQueryオブジェクト (j_old_bg) を取得します。
        • j_old_bg をクローンして新しい背景レイヤ (j_new_bg) を作成します。
        • j_new_bg の background-image を新しい画像に設定します。
        • position が指定されていれば background-size: cover と background-position を設定します。
        • j_new_bg を非表示 (display:none) にして j_old_bg の直後に追加します。
        • kag.layer.updateLayer("base", "fore", j_new_bg) で参照を更新します。
        • wait=true なら weaklyStop() を呼び出します。
        • pm.cross=true の場合は、j_old_bg に対して $.trans(method, time, "hide") を実行し、完了後に j_old_bg.remove() します。
        • j_new_bg に対して $.trans(method, time, "show") を実行します。
        • show アニメーション完了後:
          • j_new_bg の opacity を 1 にします。
          • pm.cross=false の場合は、ここで j_old_bg.remove() します。
          • wait=true なら cancelWeakStop() と nextOrder() を呼び出します。
      5. wait=false の場合は、プリロード開始とほぼ同時に nextOrder を呼び出します。
    • サンプルコード: tyranoscript [bg storage=fg0.png time=1500 wait=true]

    3.10. [bg2]

    • グループ: 画像・背景・レイヤ操作
    • タイトル: 背景の切り替え
    • 説明:
      • [bg] とほぼ同じですが、背景を background-image ではなく <img> 要素で表示します。
      • これにより、画像のサイズや位置を width, height, left, top で細かく指定できます。
    • パラメータ:
      • storage: (必須) 画像ファイル名。data/bgimage から読み込みます。
      • name: (任意) 生成される <img> 要素に name 属性値を設定します。 (デフォルト値: "")
      • method: (任意) 切り替え効果。 (デフォルト値: "crossfade")
      • wait: (任意) 切り替え完了を待つか (true or false)。 (デフォルト値: "true")
      • time: (任意) 切り替え時間 (ミリ秒)。 (デフォルト値: 3000)
      • width, height, left, top: (任意) <img> 要素のサイズと位置 (px)。 (デフォルト値: "")
      • cross: (任意) クロスフェード方式か (true or false)。 (デフォルト値: "false")
    • 期待される動作:
      1. [bg] と同様に画像をプリロードします。
      2. プリロード完了後:
        • 現在の背景レイヤ (base, fore) をクローンして新しい背景レイヤ (j_new_bg) を作成します。
        • 新しい <img> 要素 (j_bg_img) を生成し、src, position, width, height, left, top スタイルを設定します。
        • j_new_bg 内の既存の <img> を削除し、j_bg_img を追加します。
        • name があれば j_new_bg に設定します。
        • 以降のトランジション処理は [bg] と同様です。
    • サンプルコード: (省略。[bg] のサンプル参照)

    3.11. [layopt]

    • グループ: 画像・背景・レイヤ操作
    • タイトル: レイヤの属性設定
    • 説明:
      • 前景レイヤまたはメッセージレイヤの属性(表示状態、位置、不透明度など)を変更します。
    • パラメータ:
      • layer: (必須) 対象レイヤ名 (message, message0, 0, 1, …, fix)。message は現在の操作対象レイヤ。
      • page: (任意) 対象ページ (fore or back)。 (デフォルト値: "fore")
      • visible: (任意) レイヤを表示するか (true or false)。 (デフォルト値: "")
      • left: (任意) レイヤの左端位置 (px)。 (デフォルト値: "")
      • top: (任意) レイヤの上端位置 (px)。 (デフォルト値: "")
      • opacity: (任意) レイヤの不透明度 (0-255)。 (デフォルト値: "")
    • 期待される動作:
      1. layer="message" の場合、kag.stat.current_layer, kag.stat.current_page を参照して対象レイヤを決定します。
      2. 対象レイヤのjQueryオブジェクト (j_layer) を取得します。layer="fix" の場合は .fixlayer 全体を取得します。
      3. visible が指定されていれば、display スタイルと l_visible 属性を更新します。
      4. left, top, opacity が指定されていれば、対応するCSSスタイルを更新します。
      5. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    ;メッセージレイヤを消去 
    @layopt layer=message0 visible=false 
    [backlay] 
    
    [image layer=0 page=back visible=true top=100 left=50 storage = miku1.png] 
    [trans time=2000] @wt 
    
    ;そしてレイヤ表示 
    @layopt layer=message0 visible=true

    3.12. [locate]

    • グループ: 画像・背景・レイヤ操作

    • タイトル: 表示位置の指定

    • 説明:

      • 次に実行される [button] タグなどの表示位置のデフォルト値を設定します。
      • テキスト ([ptext]) には影響しません。
    • パラメータ:

      • x: (任意) デフォルトの左端位置 (px)。 (デフォルト値: null)
      • y: (任意) デフォルトの上端位置 (px)。 (デフォルト値: null)
    • 期待される動作:

      1. pm.x が指定されていれば kag.stat.locate.x を更新します。
      2. pm.y が指定されていれば kag.stat.locate.y を更新します。
      3. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      [locate x=20 y=100]
      [button graphic="oda.png" target=*oda]
      
      [locate x=300 y=100]
      [button graphic="toyo.png" target=*toyo]

    4. ラベル・ジャンプ操作関連タグ

    4.1. [label]

    • グループ: (内部的)
    • タイトル: ラベル定義
    • 説明:
      • シナリオファイル内のジャンプ先となるラベルを定義します。
      • 通常、シナリオファイルには label_name の形式で記述し、内部的にこの [label] タグに変換されます。
      • 既読管理機能 (Config.tjs の autoRecordLabel) が有効な場合、ラベル通過時に既読情報を記録・判定します。
    • パラメータ:
      • label_name: (必須) ラベル名。
      • val: (任意) ラベルの表示名 (コメントなど)。 (デフォルト値: "")
      • line: (内部的) シナリオファイル内の行番号。
      • index: (内部的) タグ配列内でのインデックス。
      • nextorder: (任意) ラベル定義後に nextOrder を呼ぶか。通常はtrue。 (デフォルト値: "true")
    • 期待される動作:
      1. 既読管理が有効な場合:
        • 通過したラベルの情報をシステム変数 (sf.record) に記録します (kag.stat.buff_label_name を使用)。
        • 現在のラベルがすでに記録されているかを確認し、kag.stat.already_read (既読フラグ) を更新します。
        • kag.stat.buff_label_name を現在のラベル情報で更新します。
      2. pm.nextorder が "true" なら次のタグへ進みます (nextOrder)。
    • サンプルコード: (通常は label_name 形式で記述)

    4.2. [jump]

    • グループ: ラベル・ジャンプ操作
    • タイトル: シナリオのジャンプ
    • 説明:
      • 指定したシナリオファイル、または現在のシナリオファイル内の指定したラベルにジャンプします。
      • [call] とは異なり、コールスタックには残らないため、[return] で戻ることはできません。
    • パラメータ:
      • storage: (任意) ジャンプ先のシナリオファイル名。省略時は現在のシナリオ。 (デフォルト値: null)
      • target: (任意) ジャンプ先のラベル名 ( は省略可)。省略時はファイルの先頭。 (デフォルト値: null)
      • countpage: (任意) 【廃止予定?】 (デフォルト値: true)
    • 期待される動作:
      1. ホールド状態の [glink] が存在すれば、その storage, target を pm に反映させ、ホールド状態を解除します。
      2. setTimeout を使用して、わずかに遅延させてから nextOrderWithLabel(pm.target, pm.storage) を呼び出します。これにより、ジャンプ処理が非同期的に実行され、直後の処理との競合を防ぎます。
    • サンプルコード:
    ;second.ks というシナリオファイルの *start ラベルへ移動する 
    [jump storage=second.ks target=*start]

    4.3. [link]

    • グループ: ラベル・ジャンプ操作
    • タイトル: ハイパーリンク(選択肢)の開始
    • 説明:
      • [link] と [endlink] で囲まれたテキストを、クリック可能な選択肢(ハイパーリンク)にします。
      • クリックされると指定した storage / target にジャンプします ([jump] と同様の動作)。
      • 選択肢を表示した後は、通常 [s] タグでゲームの進行を停止させる必要があります。
    • パラメータ:
      • storage: (任意) ジャンプ先のシナリオファイル名。 (デフォルト値: null)
      • target: (任意) ジャンプ先のラベル名。 (デフォルト値: null)
      • keyfocus: (任意) キーボード/ゲームパッドでのフォーカスを有効にするか、またはフォーカス順序を指定。 (デフォルト値: "")
      • once: (任意) 一度クリックされたら無効にするか (true or false)。 (デフォルト値: "true")
    • 期待される動作:
      1. 現在のメッセージレイヤに新しい <span> を追加し、current_span に設定します。
      2. kag.stat.display_link を true に設定します (リンク表示中フラグ)。
      3. <span> 要素に pointer カーソルとフォーカス関連のクラス・属性を設定します (kag.setElmCursor, kag.makeFocusable)。
      4. kag.event.addEventElement でイベント情報を登録します。
      5. setEvent メソッドを呼び出してクリックイベントリスナを設定します。
        • クリック時:
          • 音声再生制限を解除します (kag.readyAudio)。
          • 仮想マウスカーソルが表示中などはクリックを無効化します。
          • once=true でクリック済みなら無効化します。
          • クリック済みフラグ (clicked) を立てます。
          • once=true の場合、画面上のすべての [link] 要素のクリックイベントを解除し、カーソルを元に戻し、イベント属性を削除します。
          • 仮想マウスカーソルを隠します (kag.key_mouse.vmouse.hide)。
          • kag.stat.display_link を false に設定します。
          • [jump] タグを実行してジャンプします (nextOrderWithLabel)。
          • スキップ継続設定 (kag.stat.skip_link) に応じてスキップ状態を制御します。
      6. 次のタグへ進みます (nextOrder)。
    • サンプルコード: (省略。[endlink] のサンプル参照)

    4.4. [endlink]

    • グループ: ラベル・ジャンプ操作

    • タイトル: ハイパーリンク(選択肢)の終了

    • 説明:

      • [link] タグで開始したテキストのリンク化を終了します。
    • パラメータ: (なし)

    • 期待される動作:

      1. 現在のメッセージレイヤの current_span を確定させます (新しい <span> を挿入します)。
      2. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      選択肢を表示します[l][r][r]
      
      [link target=*select1]【1】選択肢 その1[endlink][r]
      [link target=*select2]【2】選択肢 その2[endlink][r]
      
      [s]
      
      *select1
      [cm]
      「選択肢1」がクリックされました[l]
      @jump target=*common
      
      *select2
      [cm]
      「選択肢2」がクリックされました[l]
      @jump target=*common
      
      *common
      [cm]
      
      共通ルートです

    4.5. [glink]

    • グループ: ラベル・ジャンプ操作

    • タイトル: グラフィカルリンク

    • 説明:

      • テキストボタン(グラフィカルリンク)を表示します。画像不要で様々なデザインのボタンを作成できます。
      • クリックされると指定した storage / target にジャンプします ([jump] と同様の動作)。
      • 通常、クリック後は自動的に [cm] が実行され、表示されていたボタン類が消去されます。
      • V515以降、[glink_config] タグによる自動配置機能が追加されました。
    • パラメータ:

      • color: (任意) ボタンのデザインテンプレート名 (black, red, btn_01_red など)。 (デフォルト値: "black")
      • font_color: (任意) ボタンテキストの色 (0xRRGGBB形式)。 (デフォルト値: "")
      • storage: (任意) ジャンプ先のシナリオファイル名。 (デフォルト値: null)
      • target: (任意) ジャンプ先のラベル名。 (デフォルト値: null)
      • name: (任意) ボタン要素に name 属性値を設定します。 (デフォルト値: "")
      • text: (任意) ボタンに表示するテキスト。 (デフォルト値: "")
      • x: (任意) ボタンの左端位置 (px)。auto または省略で自動配置対象。 (デフォルト値: "auto")
      • y: (任意) ボタンの上端位置 (px)。省略で自動配置対象。 (デフォルト値: "")
      • width: (任意) ボタンの横幅 (px)。 (デフォルト値: "")
      • height: (任意) ボタンの高さ (px)。 (デフォルト値: "")
      • size: (任意) フォントサイズ (px)。 (デフォルト値: 30)
      • face: (任意) フォント名。 (デフォルト値: "")
      • graphic: (任意) ボタンの背景画像ファイル。data/image から読み込み。指定時は color 無視。 (デフォルト値: "")
      • enterimg: (任意) graphic 指定時、マウスホバー時の背景画像。 (デフォルト値: "")
      • cm: (任意) クリック後に [cm] を実行するか (true or false)。 (デフォルト値: "true")
      • opacity: (任意) ボタンの不透明度 (0-255)。 (デフォルト値: "")
      • clickse: (任意) クリック時の効果音ファイル。data/sound から。 (デフォルト値: "")
      • enterse: (任意) マウスホバー時の効果音ファイル。 (デフォルト値: "")
      • leavese: (任意) マウスアウト時の効果音ファイル。 (デフォルト値: "")
      • exp: (任意) クリック時に実行するJavaScript式。 (デフォルト値: "")
      • preexp: (任意) exp 内で使用できる値を事前に評価して設定。 (デフォルト値: "")
      • bold: (任意) 太字にするか (true or false)。 (デフォルト値: "")
      • edge: (任意) 文字の縁取り。[font] と同様。 (デフォルト値: "")
      • shadow: (任意) 文字の影。[font] と同様。 (デフォルト値: "")
      • keyfocus: (任意) キーボード/ゲームパッドでのフォーカスを有効にするか、またはフォーカス順序を指定。 (デフォルト値: "")
      • autopos: (任意) true で自動配置対象にする (x="auto", y="" と同じ)。 (デフォルト値: "false")
      • show_*, select_*, reject_*: (内部的) [glink_config] から引き継がれるアニメーション設定。
    • 期待される動作:

      1. フリーレイヤを取得します。
      2. <div> 要素 (j_button) を生成し、基本スタイル (position, z-index, font-size など) を適用します。
      3. autopos=true なら pm.x = "auto", pm.y = "" とします。
      4. font_color, width, height, opacity, bold, edge, shadow, face を適用します。
      5. graphic があれば背景画像を設定し、なければ color に応じたクラスを追加します。
      6. x, y または locate 情報に基づいて位置を設定します。
      7. name があれば設定します。
      8. preexp を評価し、pm に再格納します。
      9. [glink_config] からアニメーション関連のパラメータを pm にマージします。
      10. kag.event.addEventElement でイベント情報を登録します。
      11. setEvent メソッドを呼び出してイベントリスナを設定します。
        • ホバー時: enterimg の切り替え、enterse の再生。
        • マウスダウン時: イベント伝搬停止。
        • クリック時:
          • 各種無効化チェック (信頼済みイベントか、ストロングストップ中か、クリック済みかなど)。
          • クリック済みフラグ (button_clicked) を立てます (cm=false の場合は立てません)。
          • 他の [glink] ボタンのイベントを解除します (cancelAllFreeLayerButtonsEvents)。
          • clicked_button クラスを追加します。
          • clickimg があれば画像を変更します。
          • 効果音 (clickse) を再生します。
          • exp があればJavaScriptを実行します。
          • select_*, reject_* パラメータに基づいて、クリックされたボタンとされなかったボタンに退場アニメーション (startAnim) を適用します。
          • アニメーションが不要またはスキップ中の場合、即座に next() (内部関数) を呼び出します。
          • next():
            • cm=true なら [cm] を実行します。
            • pm.hold が "true" ならジャンプ情報を保持します。
            • [jump] タグを実行します。
            • スキップ継続設定 (kag.stat.skip_link) に応じてスキップ状態を制御します。
      12. 自動配置が有効な場合 (pm.x="auto", pm.y="" など) は、glink_button_auto_place クラスを追加し、要素を非表示にします。[s] タグ実行時に showGLinks が呼ばれて表示・配置されます。
      13. 自動配置が無効な場合、表示アニメーション (show_* パラメータ) が設定されていれば startAnim を呼び出して実行します。
      14. ボタン要素をフリーレイヤに追加し、表示します (target_layer.append(j_button).show())。
      15. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      [glink target="j1" text="選択肢1" size=20  width="500" y=300]
      [glink target="j2" text="選択肢2" size=30  width="500" y=400]
      [glink target="j3" text="選択肢3" size=30  width="500" y=400]
      
      [s]

    4.6. [glink_config]

    • グループ: ラベル・ジャンプ操作

    • タイトル: グラフィカルリンクの設定

    • 説明: (V515以降)

      • [glink] の自動配置やアニメーションに関するデフォルト設定を行います。
    • パラメータ:

      • auto_place: (任意) 自動配置を有効にするか (true or false)。 (デフォルト値: "true")
      • auto_place_force: (任意) x, y 指定のある [glink] も強制的に自動配置対象にするか (true or false)。 (デフォルト値: "false")
      • margin_x, margin_y: (任意) ボタン外側の余白 (px)。 (デフォルト値: margin_x="0", margin_y="20")
      • padding_x, padding_y: (任意) ボタン内側の余白 (px)。defaultで無調整。 (デフォルト値: "default")
      • direction: (任意) ボタンの並び方向 (row または column)。 (デフォルト値: "column")
      • wrap: (任意) 折り返し (wrap または nowrap)。 (デフォルト値: "nowrap")
      • dx, dy: (任意) 配置領域全体のオフセット (px)。 (デフォルト値: "0")
      • width, height: (任意) ボタンサイズ揃え (max, 数値(px), default)。 (デフォルト値: "default")
      • vertical: (任意) 縦方向揃え (top, center, bottom)。 (デフォルト値: "center")
      • horizontal: (任意) 横方向揃え (left, center, right)。 (デフォルト値: "center")
      • place_area: (任意) 配置基準領域 (auto, cover, left,top,width,height)。 (デフォルト値: "auto")
      • show_*, select_*, reject_*: (任意) 各タイミングでのアニメーション設定 (time, effect, keyframe, delay, easing)。
    • 期待される動作:

      1. kag.stat.glink_config オブジェクトを必要ならデフォルト値 (default_glink_config) で初期化します。
      2. horizontal, vertical の値をCSSの flex プロパティ値に変換します。
      3. 指定されたパラメータの値を kag.stat.glink_config に格納します。
      4. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      [glink_config auto_place="true" show_time="300"]
      [position left="160" top="500" width="1000" height="200" visible="true"]
      [position margint="45" marginl="50" marginr="70" marginb="60"]
      ティラノスクリプトに興味ある?[l]
      [glink  color="btn_13_red" text="はい。興味あります"  target="*selectinterest"]
      [glink  color="btn_13_red" text="興味あります!"  target="*selectinterest"]
      [glink  color="btn_13_red" text="どちらかと言うと興味あり"  target="*selectinterest"]
      [s]
      
      *selectinterest
      ホント!?うれしいなー[p]

    5. 変数・JS操作・ファイル読込関連タグ

    5.1. [eval]

    • グループ: 変数・JS操作・ファイル読込

    • タイトル: 式の評価

    • 説明:

      • exp パラメータに指定されたJavaScriptの文を実行します。
      • 主にゲーム変数(f.*)やシステム変数(sf.*)に値を代入するために使用されます。
    • パラメータ:

      • exp: (必須) 実行するJavaScript文。
      • next: (任意) false を指定すると nextOrder を呼び出しません。 (デフォルト値: "true")
    • 期待される動作:

      1. kag.evalScript(pm.exp) を呼び出してJavaScript文を実行します。これにより、f, sf, tf, mp 変数がスコープ内で利用可能になります。
      2. pm.next が "true" なら次のタグへ進みます (nextOrder)。
    • サンプルコード:

      [eval exp="f.akane_like=50"]
      ;↑ゲーム変数 akane_like に 50 という数値をセット
      ;あかねの好感度は50のようだ
      
      [eval exp="f.akane_nickname='あーちゃん'"]
      ;↑ゲーム変数 akane_nickname に あーちゃん という文字列をセット
      ;あかねのあだ名はあーちゃんのようだ
      ;※文字列はシングルクォーテーション(')で囲みます
      
      [eval exp="f.yamato_like = f.akane_like * 2"]
      ;↑ゲーム変数 yamato_like に ゲーム変数 akane_like の 2倍の数値をセット
      ;やまとの好感度はあかねの好感度の2倍のようだ

    5.2. [clearvar]

    • グループ: 変数・JS操作・ファイル読込
    • タイトル: 変数の消去
    • 説明:
      • ゲーム変数(f.*)またはシステム変数(sf.*)を消去します。
      • exp を省略すると、すべてのゲーム変数(f.*)と一時変数(tf.*、ただし tf.system を除く)が消去されます。
    • パラメータ:
      • exp: (任意) 消去する変数名 (f.name, sf.flag など)。省略時は全消去。 (デフォルト値: "")
    • 期待される動作:
      1. pm.exp が空文字列の場合:
        • kag.clearVariable() を呼び出します。これにより kag.stat.f と kag.variable.sf が空のオブジェクト {} になり、kag.variable.tf も system プロパティを除いて空になります。その後、システム変数 (sf) をストレージに保存します (saveSystemVariable)。
      2. pm.exp が指定されている場合:
        • kag.evalScript("delete " + pm.exp) を呼び出して指定された変数を削除します。
      3. 次のタグへ進みます (nextOrder)。

    5.3. [clearsysvar]

    • グループ: 変数・JS操作・ファイル読込
    • タイトル: システム変数の全消去
    • 説明:
      • すべてのシステム変数 (sf.*) を消去します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.variable.sf を空のオブジェクト {} に設定します。
      2. 次のタグへ進みます (nextOrder)。

    5.4. [trace]

    • グループ: 変数・JS操作・ファイル読込

    • タイトル: コンソールへの値の出力

    • 説明:

      • exp パラメータに指定されたJavaScript式を評価し、その結果をブラウザのコンソールに出力します。デバッグ用途に使用します。
    • パラメータ:

      • exp: (任意) 評価するJavaScript式。 (デフォルト値: "")
    • 期待される動作:

      1. kag.embScript(pm.exp) を呼び出して式を評価します。
      2. 評価結果を kag.log("trace出力:" + val) でコンソールに出力します。
      3. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      ;ゲーム変数testに1を入れる
      [eval exp="f.test=1"]
      
      ;ゲーム変数testの内容をコンソールに出力する
      [trace exp="f.test"]

    5.5. [emb]

    • グループ: 変数・JS操作・ファイル読込

    • タイトル: 式評価結果の埋め込み

    • 説明:

      • exp パラメータに指定されたJavaScript式を評価し、その結果を現在のメッセージテキストに追加します。
      • 主に変数の中身をテキスト中に表示したい場合に使用します。
    • パラメータ:

      • exp: (必須) 評価するJavaScript式。
    • 期待される動作:

      1. kag.embScript(pm.exp) を呼び出して式を評価し、結果を文字列に変換します ("" + ...)。
      2. 内部的に [text] タグを呼び出し、評価結果の文字列を表示します。この際、backlog="join" が渡されるため、バックログ上では直前のテキストと連結されます。
    • サンプルコード:

      ;ゲーム変数 name に ポチ という文字列をセット
      [eval exp="f.name='ポチ'"]
      ;↑長くなるためここでは扱いませんが
      ; [edit]タグでプレイヤーに入力させてみても面白いですね
      
      ;テキスト中に変数の中身を埋め込む
      今日からこの子の名前は[emb exp="f.name"]だ。[l][r]
      
      ;キャラの名前のようなケースでは
      ;仮名でマクロ化しておくとシナリオファイルが読みやすくなるでしょう
      [macro name="シロ"]
        [emb exp="f.name"]
      [endmacro]
      
      ;仮名マクロで記述する
      おーい、[シロ]。[シロ]!元気?[s]
      ;※サンプルでは f.name に ポチ が入っているのでポチと表示される

    5.6. [iscript], [endscript]

    • グループ: 変数・JS操作・ファイル読込

    • タイトル: JavaScriptの記述 / JavaScriptの終了

    • 説明:

      • [iscript] と [endscript] で囲まれた部分に直接JavaScriptコードを記述できます。
      • 変数操作、DOM操作、外部ライブラリの呼び出しなど、JavaScriptで可能なことは基本的に実行できます。
      • 囲まれた部分のテキストは、タグとして解析されずにJavaScriptコードとしてバッファに蓄積され、[endscript] タグ到達時にまとめて評価・実行されます。
    • パラメータ ([iscript]): (なし)

    • パラメータ ([endscript]):

      • stop: (任意) true を指定すると、[endscript] 実行後に nextOrder を呼び出しません。JavaScript内でジャンプ処理を行いたい場合に使用します。 (デフォルト値: "false")
    • 期待される動作:

      • [iscript]:
        1. kag.stat.is_script を true に設定します。
        2. kag.stat.buff_script を空文字列に初期化します。
        3. 次のタグへ進みます (nextOrder)。
      • [endscript]:
        1. kag.stat.is_script を false に設定します。
        2. kag.stat.buff_script に蓄積されたJavaScriptコードを kag.evalScript() で実行します。
        3. kag.stat.buff_script を空文字列にリセットします。
        4. pm.stop が "false" なら次のタグへ進みます (nextOrder)。
    • サンプルコード:

      [iscript]
      
      var test = 22;
      f.name = test;
      //JavaScriptの関数にアクセス可能
      alert("JavaScript");
      //jQueryも利用可能
      $("body").html();
      
      //JS方式の行コメントも書けますが
      ;ティラノスクリプトの行コメントも有効のままなので注意が必要です
      ;alert("!!")
      
      [endscript]

    5.7. [loadjs]

    • グループ: 変数・JS操作・ファイル読込
    • タイトル: 外部JavaScriptファイル読み込み
    • 説明:
      • 指定した外部JavaScriptファイルを動的に読み込み、実行します。
      • 読み込むファイルは data/others フォルダに配置します。
    • パラメータ:
      • storage: (必須) 読み込むJavaScriptファイル名。
      • type: (任意) 読み込み方式。module を指定すると ES Modules としてインポートします。 (デフォルト値: "")
    • 期待される動作:
      1. pm.type が "module" の場合:
        • import() を使用して、../../../data/others/ + pm.storage のパスにあるファイルをモジュールとして読み込みます。
        • 読み込み完了後 (Promiseが解決された後)、nextOrder を呼び出します。
      2. pm.type が "module" でない場合:
        • $.getScript("./data/others/" + pm.storage) を呼び出してJavaScriptファイルを読み込み、実行します。
        • 読み込みと実行が完了した後、nextOrder を呼び出します。
    • サンプルコード: tyranoscript ;data/others/sample.jsを読み込み [loadjs storage="sample.js"]

    5.8. [preload]

    • グループ: 変数・JS操作・ファイル読込

    • タイトル: 素材ファイルの事前読み込み

    • 説明:

      • 画像や音声などの素材ファイルを事前に読み込み(プリロード)ます。
      • これにより、実際に素材を使用する際の表示や再生がスムーズになります。
      • storage にはファイルパスの文字列、またはファイルパス文字列の配列を指定できます。
      • V515以降、音声ファイルはデフォルトで使い捨て(single_use="true")となり、一度再生されるとプリロードデータが破棄されます。繰り返し使う音声は single_use="false" を指定するか、都度 [preload] してください。
    • パラメータ:

      • storage: (必須) プリロードするファイルパス(data/ フォルダからの相対パス)、またはファイルパスの配列。
      • wait: (任意) true を指定すると、すべてのファイルの読み込みが完了するまで待機します。 (デフォルト値: "false")
      • single_use: (任意) 音声ファイルの場合、一度使用したらプリロードデータを破棄するか (true or false)。 (デフォルト値: "true")
      • name: (任意) 音声ファイルの場合、プリロードデータに名前(グループ名)を付けます。カンマ区切りで複数指定可。[unload] でまとめて削除する際に使用。 (デフォルト値: "")
    • 期待される動作:

      1. wait="true" の場合、weaklyStop() を呼び出して一時停止します。
      2. storage が配列の場合:
        • 配列内の各ファイルパスに対して kag.preload() を呼び出します。
        • すべてのプリロードが完了した時点で、wait="true" なら cancelWeakStop() と nextOrder() を呼び出します。
      3. storage が文字列の場合:
        • kag.preload(pm.storage, ...) を呼び出します。
        • プリロード完了後、wait="true" なら cancelWeakStop() と nextOrder() を呼び出します。
      4. wait="false" の場合、kag.preload() 呼び出し後(プリロード完了を待たずに) cancelWeakStop() と nextOrder() を呼び出します。
      5. kag.preload 内部処理:
        • ファイル拡張子を判定します。
        • 音声ファイルの場合:
          • プリロード済みかチェックします。ロード中なら完了を待ち、ロード済みなら即コールバックを呼びます。
          • 未ロードなら Howl オブジェクトを生成し、preload_audio_map に格納します。
          • __preload, __single_use, __names プロパティを設定します。
          • ロードを開始 (audio_obj.load()) し、完了またはエラー時にコールバックを呼びます。
        • 動画ファイルの場合:
          • <video> 要素を生成し、src を設定します。
          • loadeddata または loadedmetadata イベントでコールバックを呼びます。
        • 画像ファイルの場合:
          • <img> 要素を生成し、src を設定します。
          • load イベントでコールバックを呼びます。
    • サンプルコード:

      ;画像ファイルはフルパス(プロジェクトファイル以下)で指定します
      [preload storage="data/fgimage/girl.jpg"]
      
      ;配列を渡すと、まとめてロードすることもできます。
      [iscript]
      f.preload_images = [
        'data/fgimage/girl.jpg',
        'data/fgimage/haruko.png',
        'data/fgimage/miku1.png',
        'data/fgimage/miku2.png'
      ];
      [endscript]
      
      [preload storage=&f.preload_images]

    5.9. [unload]

    • グループ: 変数・JS操作・ファイル読込
    • タイトル: 音声プリロードデータの破棄
    • 説明: (V515以降)
      • [preload] タグで single_use="false" を指定して読み込んだ音声プリロードデータをメモリから破棄します。
      • storage, name, all_sound のいずれかのパラメータで破棄対象を指定します。
    • パラメータ:
      • storage: (任意) 破棄する音声ファイルのパス。
      • name: (任意) 破棄する音声のグループ名 ([preload] の name で指定したもの)。
      • all_sound: (任意) true を指定すると、すべての音声プリロードデータを破棄。 (デフォルト値: "false")
    • 期待される動作:
      1. all_sound="true" の場合:
        • kag.tmp.preload_audio_map 内のすべての Howl オブジェクトに対して unload() を呼び出し、マップから削除します。
      2. name が指定されている場合:
        • preload_audio_map を走査し、指定された name を __names 配列に含む Howl オブジェクトに対して unload() を呼び出し、マップから削除します。
      3. storage が指定されている場合:
        • storage パスに対応する Howl オブジェクトを取得し、unload() を呼び出してマップから削除します。
      4. 次のタグへ進みます (nextOrder)。

    5.10. [plugin]

    • グループ: 変数・JS操作・ファイル読込

    • タイトル: プラグイン読み込み

    • 説明:

      • 外部プラグイン(data/others/plugin/ 内のフォルダ)を読み込みます。
      • デフォルトではプラグインフォルダ内の init.ks が [call] されます。
      • 任意のパラメータを渡すことができ、プラグイン内のシナリオ (init.ks など) で mp 変数を通じてアクセスできます。
    • パラメータ:

      • name: (必須) 読み込むプラグインのフォルダ名。
      • storage: (任意) 最初に読み込むシナリオファイル名。 (デフォルト値: "init.ks")
      • (任意) その他: 自由にパラメータを指定できます。
    • 期待される動作:

      1. pm.storage にプラグインフォルダへのパス (../others/plugin/name/) を追加します。
      2. 現在のマクロパラメータ (kag.stat.mp) を、このタグに渡されたパラメータ (pm) で上書きします。
      3. [call] タグを内部的に呼び出し、プラグインの storage を実行します。
    • サンプルコード:

      ;プラグイン my_plugin を読み込み
      [plugin name="my_plugin" ]
      ;↑ data/others/plugin/my_plugin/init.ks にジャンプしているよ
      
      ;自由に引数を渡すことも可能
      [plugin name="my_plugin" font_color="black" arg2="aaaaaa" ]

    6. マクロ・分岐・サブルーチン関連タグ

    6.1. [if], [elsif], [else], [endif]

    • グループ: マクロ・分岐・サブルーチン関連

    • タイトル: 条件分岐

    • 説明:

      • JavaScript の式 (exp) を評価し、その結果 (true または false) に基づいてシナリオの実行フローを分岐させます。
      • [if] で最初の条件を評価します。
      • [elsif] で追加の条件を評価します(先行する [if] や [elsif] が false だった場合のみ)。
      • [else] は、先行するすべての [if] と [elsif] が false だった場合に実行されます。
      • [endif] で条件分岐ブロックを終了します。[if] には必ず対応する [endif] が必要です。
    • パラメータ:

      • exp ([if], [elsif]): (必須) 評価するJavaScript式。
    • 期待される動作:

      • [if]:
        1. kag.embScript(pm.exp) で式を評価します。
        2. 結果が true の場合:
          • if スタックに {bool: true, deep: ...} をプッシュします。
          • 次のタグへ進みます (nextOrder)。
        3. 結果が false の場合:
          • if スタックに {bool: false, deep: ...} をプッシュします。
          • 対応する [elsif], [else], [endif] のいずれかまでタグをスキップします (nextOrderWithTagSearch)。見つからない場合はエラー。
      • [elsif]:
        1. 現在の if スタックの状態 (kag.getStack("if").bool) を確認します。すでに true (いずれかの条件が満たされている) ならば、対応する [else] または [endif] までスキップします。
        2. if スタックが false の場合、kag.embScript(pm.exp) で式を評価します。
        3. 結果が true の場合:
          • if スタックの状態を {bool: true} に更新します (setStack)。
          • 次のタグへ進みます (nextOrder)。
        4. 結果が false の場合:
          • 対応する [elsif], [else], [endif] のいずれかまでスキップします。
      • [else]:
        1. 現在の if スタックの状態を確認します。true ならば、対応する [endif] までスキップします。
        2. if スタックが false の場合:
          • if スタックの状態を {bool: true} に更新します。
          • 次のタグへ進みます (nextOrder)。
      • [endif]:
        1. if スタックから最新の要素をポップします (popStack("if"))。
        2. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      ;ゲーム変数 like に 50 という数値をセット
      ;自由に変えてみてください
      [iscript]
      f.like = 50
      [endscript]
      
      例1[p]
      
      [if exp="f.like < 30"]
        好感度が低いです[p]
      [endif]
      
      例2[p]
      
      [if exp="f.like < 30"]
        好感度が低いです[p]
      [else]
        好感度が低くはないようです[p]
      [endif]
      
      例3[p]
      
      [if exp="f.like >= 80"]
        最高の好感度です[p]
      [elsif exp="f.like >= 40"]
        かなり高い好感度です[p]
      [else]
        好感度は高くありません[p]
      [endif]

    6.2. [clearstack]

    • グループ: マクロ・分岐・サブルーチン関連
    • タイトル: スタックの消去
    • 説明:
      • [call], [if], [macro] タグの実行によって蓄積される内部的なスタック情報を消去します。
      • [return], [endif], [endmacro] を経由しないジャンプ ([jump]) を多用するとスタックが溜まり、動作不良の原因となる可能性があるため、シナリオの区切りなどで定期的に実行することが推奨されます。
      • V515以降、stack="anim" を指定するとアニメーションスタック (kag.tmp.num_anim) をリセットできます。
    • パラメータ:
      • stack: (任意) 消去するスタックの種類 (call, if, macro, anim)。省略時は call, if, macro をすべて消去。 (デフォルト値: "")
    • 期待される動作:
      1. pm.stack が空文字列の場合、kag.stat.stack.if, kag.stat.stack.call, kag.stat.stack.macro をすべて空の配列 [] で初期化します。
      2. pm.stack が "anim" の場合、kag.tmp.num_anim を 0 に設定します。
      3. pm.stack が "call", "if", "macro" のいずれかの場合、対応する kag.stat.stack 内の配列を空にします。
      4. 次のタグへ進みます (nextOrder)。

    6.3. [call]

    • グループ: マクロ・分岐・サブルーチン関連

    • タイトル: サブルーチンの呼び出し

    • 説明:

      • 指定したシナリオファイル・ラベル(サブルーチン)にジャンプします。
      • ジャンプ先で [return] タグに到達すると、この [call] タグを実行した場所に戻ってくることができます。
      • 共通処理などをサブルーチン化して呼び出すのに便利です。
    • パラメータ:

      • storage: (任意) 呼び出すサブルーチンが存在するシナリオファイル名。省略時は現在のシナリオ。 (デフォルト値: null)
      • target: (任意) 呼び出すサブルーチンのラベル名。省略時はファイルの先頭。 (デフォルト値: null)
      • countpage: (任意) 【廃止予定?】 (デフォルト値: true)
      • auto_next: (任意) [return] で戻ってきた後に自動で nextOrder を呼ぶか (yes or no)。通常は yes。 (デフォルト値: "yes")
    • 期待される動作:

      1. 現在の実行位置情報(インデックス、シナリオファイル名)、auto_next パラメータ、[call] タグ自身のパラメータ (pm) を含むオブジェクト (back_pm) を作成します。
      2. kag.pushStack("call", back_pm) でコールスタックにプッシュします。
      3. pm.target が null で pm.storage が指定されている場合は、指定シナリオの先頭 (index = -1) にジャンプします (nextOrderWithIndex)。
      4. それ以外の場合は、指定された target ラベルにジャンプします (nextOrderWithLabel)。
    • サンプルコード:

      頭をなでた。[p]
      [call target=sub]
      しっぽをなでた。[p]
      [call target=sub]
      おなかをなでた。[p]
      [call target=sub]
      おわり[s]
      
      *sub
      [font color=green]
      好感度が上がったぞ!
      [resetfont][p]
      [return]

    6.4. [return]

    • グループ: マクロ・分岐・サブルーチン関連
    • タイトル: サブルーチンから戻る
    • 説明:
      • [call] タグで呼び出されたサブルーチンから、呼び出し元の [call] タグの次の位置に戻ります。
    • パラメータ: (なし)
    • 期待される動作:
      1. コールスタックから最新の呼び出し元情報 (pm) を取得します (kag.getStack("call"))。取得できない場合はエラーにはならず、そのまま処理を続行しようとしますが、通常は想定されません。
      2. make.ks や resizecall からの return の場合、特定のフラグ (flag_ref_page, loading_make_ref) を操作し、必要であれば "load-complete" イベントを発火させます。
      3. コールスタックから最新の要素をポップします (kag.popStack("call"))。
      4. 取得した呼び出し元情報 (pm) を使用して、nextOrderWithIndex(pm.index, pm.storage, undefined, undefined, pm.auto_next) を呼び出し、呼び出し元の次のタグから実行を再開します。
    • サンプルコード: (省略。[call] のサンプル参照)

    6.5. [macro], [endmacro]

    • グループ: マクロ・分岐・サブルーチン関連

    • タイトル: マクロ定義の開始 / マクロ定義の終了

    • 説明:

      • [macro] と [endmacro] で囲まれた部分を、新しいカスタムタグ(マクロ)として定義します。
      • name 属性で指定した名前がマクロ名(タグ名)となります。
      • マクロ内で使用されるタグのパラメータには特殊な記述が可能です。
        • %param: マクロ呼び出し時に渡された param パラメータの値を使用します。
        • %param|default: param が渡されなかった場合のデフォルト値を指定できます。
        • : マクロ呼び出し時に渡されたすべてのパラメータをそのタグに渡します。
    • パラメータ ([macro]):

      • name: (必須) 定義するマクロ(カスタムタグ)の名前。既存のタグ名や予約語(text, label など)は使用できません。
    • パラメータ ([endmacro]): (なし)

    • 期待される動作:

      • [macro]:
        1. 現在の実行位置(インデックス、シナリオファイル名)を kag.stat.map_macro[pm.name] に格納します。
        2. マクロ定義解析中フラグ (kag.tmp.checking_macro = true) を立てます。
        3. 対応する [endmacro] までタグをスキップします (nextOrderWithTagSearch)。見つからない場合はエラー。
      • [endmacro]:
        1. マクロ定義解析中フラグ (kag.tmp.checking_macro) が true ならば、フラグを false にして nextOrder を呼び、処理を終了します。
        2. マクロ実行中の場合(解析中でない場合):
          • マクロスタックから最新の呼び出し元情報 (map_obj) を取得します (kag.getStack("macro"))。
          • マクロスタックをポップします (popStack("macro"))。
          • さらにマクロスタックを取得し(ネストされたマクロの場合)、kag.stat.mp (現在のマクロパラメータ)を復元します。
          • nextOrderWithIndex(map_obj.index, map_obj.storage, true) を呼び出して、マクロ呼び出し元の次のタグから実行を再開します。
    • サンプルコード:

      ;自分で[my_color_1]というタグを作れる!!
      [macro name="my_color_1"]
        [font color="0xff0000"]
        新しいタグです[p]
        [resetfont]
      [endmacro]
      
      ;さっそく使ってみる
      [my_color_1]
      
      ;iroパラメータを指定できる、もし指定がなかったら0xff0000
      [macro name="my_color_2"]
        [font color=%iro|0xff0000]
        iroパラメータを指定できるタグです[p]
        [resetfont]
      [endmacro]
      
      ;さっそく使ってみる
      [my_color_2 iro=0x00ff00]
      [my_color_2]
      
      ;すべてのパラメータを流用するマクロ
      [macro name="my_color_3"]
        [font *]
        すべてのパラメータを渡せるタグです[p]
        [resetfont]
      [endmacro]
      
      [my_color_3 color=0x0000ff bold=true size=80]

    6.6. [erasemacro]

    • グループ: マクロ・分岐・サブルーチン関連
    • タイトル: マクロの削除
    • 説明:
      • [macro] タグで定義したマクロを削除します。
    • パラメータ:
      • name: (必須) 削除するマクロの名前。
    • 期待される動作:
      1. kag.stat.map_macro オブジェクトから指定された name のキーを持つプロパティを削除します (delete)。
      2. 次のタグへ進みます (nextOrder)。

    6.7. [ignore], [endignore]

    • グループ: マクロ・分岐・サブルーチン関連
    • タイトル: 条件によりシナリオを無視 / [ignore]の終了
    • 説明:
      • [ignore] タグの exp パラメータで指定されたJavaScript式を評価します。
      • 結果が true の場合、[ignore] と [endignore] で囲まれた部分のタグやテキストを無視(スキップ)します。
      • 結果が false の場合は、通常通り実行されます。
    • パラメータ ([ignore]):
      • exp: (必須) 評価するJavaScript式。
    • パラメータ ([endignore]): (なし)
    • 期待される動作:
      • [ignore]:
        1. kag.embScript(pm.exp) で式を評価します。
        2. 結果が true の場合、対応する [endignore] までタグをスキップします (nextOrderWithTagSearch)。見つからない場合はエラー。
        3. 結果が false の場合、次のタグへ進みます (nextOrder)。
      • [endignore]:
        1. 次のタグへ進みます (nextOrder)。

    6.8. [sleepgame]

    • グループ: マクロ・分岐・サブルーチン関連

    • タイトル: ゲームの一時停止

    • 説明:

      • 現在のゲーム状態(変数、表示中のレイヤ、実行位置など)を一時的に保存(スナップ)し、指定したシナリオ・ラベルにジャンプします。
      • 主に、ゲーム本編からメニュー画面(コンフィグ、セーブ/ロードなど)へ一時的に遷移し、その後ゲーム本編に戻る、といった用途に使用されます。
      • ジャンプ先では [awakegame] タグを実行することで、保存した状態に復帰できます。
      • [sleepgame] をネストすることはできません。
    • パラメータ:

      • storage: (任意) ジャンプ先のシナリオファイル名。 (デフォルト値: "")
      • target: (任意) ジャンプ先のラベル名。 (デフォルト値: "")
      • next: (任意) [awakegame] で復帰した後に nextOrder を呼ぶか (true or false)。 (デフォルト値: true)
    • 期待される動作:

      1. 現在のゲーム状態のスナップを作成します (kag.menu.snapSave)。サムネイルは作成しません。
      2. スナップ作成完了後:
        • kag.menu.setGameSleep(pm.next) を呼び出し、作成したスナップを kag.tmp.sleep_game に格納し、復帰後の nextOrder 呼び出しフラグ (kag.tmp.sleep_game_next) を設定します。
        • [jump] タグを内部的に呼び出し、指定された storage / target へジャンプします。
    • サンプルコード:

      [sleepgame storage="scene3.ks" target="*start" ]
      
      ;buttonに紐付ける方法
      [button name="button" role="sleepgame" fix="true" graphic="button/skip.gif" x=450 y=400 storage="scene3.ks" ]

    6.9. [awakegame]

    • グループ: マクロ・分岐・サブルーチン関連
    • タイトル: ゲームの一時停止からの復帰
    • 説明:
      • [sleepgame] タグで保存されたゲーム状態に復帰します。
      • [sleepgame] 中に変更されたゲーム変数 (f.*) やBGMの状態を引き継ぐかどうかを指定できます。
      • 復帰時には make.ks シナリオが読み込まれます。
    • パラメータ:
      • variable_over: (任意) f.* 変数を引き継ぐか (true or false)。 (デフォルト値: "true")
      • sound_opt_over: (任意) BGM/SEの個別音量設定 (kag.stat.map_*_volume) を引き継ぐか (true or false)。 (デフォルト値: "true")
      • bgm_over: (任意) BGM再生状態を引き継ぐか (true or false)。 (デフォルト値: "true")
    • 期待される動作:
      1. kag.tmp.sleep_game に保存されたスナップデータ (sleep_data) を取得します。存在しない場合は nextOrder を呼び出して終了します。
      2. variable_over="true" の場合、現在の kag.stat.f を sleep_data.stat.f に上書きします。
      3. sound_opt_over="true" の場合、現在の音量設定マップを sleep_data.stat.map_*_volume に上書きします。
      4. kag.menu.loadGameData(sleep_data, options) を呼び出してゲーム状態を復元します。options には bgm_over と、kag.tmp.sleep_game_next に基づく auto_next が含まれます。
      5. kag.tmp.sleep_game を null に設定します。
    • サンプルコード: (省略。[sleepgame] のサンプル参照)

    6.10. [breakgame]

    • グループ: マクロ・分岐・サブルーチン関連
    • タイトル: ゲームの停止データの削除
    • 説明:
      • [sleepgame] タグで保存された一時停止状態のデータを破棄します。
      • これにより、[awakegame] で復帰することができなくなります。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.tmp.sleep_game を null に設定します。
      2. 次のタグへ進みます (nextOrder)。

    7. システム操作関連タグ

    7.1. [s]

    • グループ: システム操作
    • タイトル: ゲームを停止する
    • 説明:
      • シナリオの実行を完全に停止します。プレイヤーのクリックや入力では再開できません。
      • 主に選択肢 ([link], [glink], [button]) を表示した後に使用し、プレイヤーの選択によってジャンプするのを待ちます。
    • パラメータ: (なし)
    • 期待される動作:
      1. 強力な停止フラグ (kag.stat.is_strong_stop = true) を立てます。
      2. 弱い停止フラグ (kag.stat.is_stop = true) も立てます。
      3. [glink] の自動配置が有効な場合 (glink_config.auto_place === "true"), showGLinks() を呼び出して保留されていた [glink] を表示・配置します。
    • サンプルコード: (省略。[link] などのサンプル参照)

    7.2. [wait]

    • グループ: システム操作

    • タイトル: ウェイト

    • 説明:

      • 指定した時間 (ミリ秒単位) だけ、ゲームの進行を停止させます。
      • この間、プレイヤーはクリックなどの操作ができません。
    • パラメータ:

      • time: (必須) 停止する時間 (ミリ秒)。
    • 期待される動作:

      1. weaklyStop(), stronglyStop() を呼び出してゲームを停止し、kag.stat.is_wait = true を設定します。
      2. setTimeout を使用して、pm.time ミリ秒後に以下の処理を実行するタイマーをセットし、タイマーIDを kag.tmp.wait_id に保存します。
        • cancelStrongStop(), cancelWeakStop() を呼び出して停止状態を解除します。
        • kag.stat.is_wait = false を設定します。
        • 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      2秒待つよ……
      
      ;2000ミリ秒(2秒)処理を停止します
      [wait time=2000]
      
      2秒待ったよ[p]

    7.3. [wait_cancel]

    • グループ: システム操作
    • タイトル: ウェイトのキャンセル
    • 説明:
      • [wait] タグによる待機状態を即座にキャンセルします。
    • パラメータ: (なし)
    • 期待される動作:
      1. clearTimeout(this.kag.tmp.wait_id) で [wait] タグがセットしたタイマーを解除します。
      2. cancelStrongStop(), cancelWeakStop() を呼び出して停止状態を解除します。
      3. kag.stat.is_wait = false を設定します。
      4. 次のタグへ進みます (nextOrder)。

    7.4. [showsave]

    • グループ: メニュー・HTML表示
    • タイトル: セーブ画面の表示
    • 説明:
      • ゲームをプレイ中にセーブ画面を直接表示します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.stat.load_auto_next を true に設定します。これにより、この画面でセーブしたデータをロードした際に、ロード完了後に自動で次のタグに進むようになります。
      2. kag.menu.displaySave() を呼び出してセーブ画面を表示します。その際のコールバックとして、セーブ画面が閉じられたときに load_auto_next を false に戻し、nextOrder を呼び出す関数を渡します。
    • サンプルコード:
    [showsave]

    7.5. [showload]

    • グループ: メニュー・HTML表示
    • タイトル: ロード画面の表示
    • 説明:
      • ゲームをプレイ中にロード画面を直接表示します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.menu.displayLoad() を呼び出してロード画面を表示します。その際のコールバックとして、ロード画面が閉じられたときに nextOrder を呼び出す関数を渡します。
    • サンプルコード:
    [showload]

    7.6. [showmenu]

    • グループ: メニュー・HTML表示
    • タイトル: メニュー画面の表示
    • 説明:
      • ゲームをプレイ中にメニュー画面を直接表示します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.menu.showMenu() を呼び出してメニュー画面を表示します。
      2. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [showmenu]

    7.7. [showlog]

    • グループ: メニュー・HTML表示
    • タイトル: バックログの表示
    • 説明:
      • ゲームをプレイ中にバックログ画面を直接表示します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.menu.displayLog() を呼び出してバックログ画面を表示します。
      2. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [showlog]

    7.8. [savesnap]

    • グループ: システム操作
    • タイトル: セーブスナップの作成
    • 説明:
      • 現在のゲーム状態を一時的に保存(スナップ)します。
      • このスナップは、tyrano.ks 拡張プラグインの [setsave] タグなどで実際のセーブデータとして保存されることを想定しています。
    • パラメータ:
      • title: (必須) セーブデータのタイトル。
    • 期待される動作:
      1. kag.menu.snapSave(pm.title, callback) を呼び出してゲーム状態のスナップを作成します。
      2. スナップ作成完了後、コールバック関数内で nextOrder を呼び出して次のタグへ進みます。

    7.9. [autosave]

    • グループ: システム操作

    • タイトル: オートセーブを実行

    • 説明:

      • 現在のゲーム状態をオートセーブデータとして自動的に保存します。
      • オートセーブデータが存在する場合、システム変数 sf.system.autosave が true になります。
    • パラメータ:

      • title: (任意) オートセーブデータのタイトル。省略時は現在のメッセージ (kag.stat.current_save_str)。 (デフォルト値: "")
    • 期待される動作:

      1. pm.title が空の場合、kag.stat.current_save_str で補完します。
      2. kag.menu.snapSave(pm.title, callback) を呼び出してスナップを作成します。
      3. スナップ作成完了後、コールバック関数内で kag.menu.doSetAutoSave() を呼び出してオートセーブデータを保存し、nextOrder を呼び出します。
    • サンプルコード:

      オートセーブデータの判定を行います[l][r]
      
      [if exp="sf.system.autosave === true"]
      
        自動的に保存されたデータが存在します。ロードしますか?[r]
        [link target=select1]【1】はい[endlink][r]
        [link target=select2]【2】いいえ[endlink][r]
        [s]
      
        *select1
        ロードを実行します[l]
        [autoload]
      
        *select2
        [cm]
        ロードを実行しません[l][r]
      
      [else]
      
        自動的に保存されたデータはありません[l][r]
      
      [endif]
      
      オートセーブを実行しました[autosave][l][r]
      ゲームを再起動してみてください[s]

    7.10. [autoload]

    • グループ: システム操作
    • タイトル: オートロードを実行
    • 説明:
      • [autosave] タグで保存されたオートセーブデータを読み込み、ゲームを再開します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.menu.loadAutoSave() を呼び出します。
      2. 内部でオートセーブデータを取得し、loadGameData を呼び出してゲーム状態を復元します。
    • サンプルコード: (省略。[autosave] のサンプル参照)

    7.11. [checkpoint]

    • グループ: システム操作
    • タイトル: チェックポイントの登録
    • 説明:
      • 現在のゲーム状態を「チェックポイント」として名前をつけて保存します。
      • 保存されたチェックポイントには [rollback] タグで戻ることができます。
    • パラメータ:
      • name: (必須) チェックポイントの名前。
    • 期待される動作:
      1. kag.menu.snapSave("checkpoint", callback, "false") を呼び出してスナップを作成します (サムネイルなし)。
      2. スナップ作成完了後、コールバック関数内で kag.menu.doSetCheckpoint(pm.name) を呼び出してスナップデータを kag.stat.checkpoint[pm.name] に保存し、nextOrder を呼び出します。
    • サンプルコード: tyranoscript [checkpoint name="p1"]

    7.12. [rollback]

    • グループ: システム操作

    • タイトル: ロールバック

    • 説明:

      • [checkpoint] タグで保存したチェックポイントの状態に戻ります。
    • パラメータ:

      • checkpoint: (必須) 戻りたいチェックポイントの名前。
      • variable_over: (任意) ロールバック後のゲーム変数(f.*)を、ロールバック実行前の状態にするか (true or false)。 (デフォルト値: "true")
      • bgm_over: (任意) ロールバック後のBGM再生状態を、ロールバック実行前の状態にするか (true or false)。 (デフォルト値: "false")
    • 期待される動作:

      1. kag.menu.doRollback(pm.checkpoint, pm.variable_over, pm.bgm_over) を呼び出します。
      2. doRollback 内部:
        • kag.stat.checkpoint[pm.checkpoint] からチェックポイントデータを取得します。存在しない場合は false を返します。
        • variable_over="true" の場合、現在の f.* 変数をチェックポイントデータの stat.f に上書きします。
        • loadGameData を呼び出してゲーム状態を復元します。is_rollback=true, auto_next="yes", bgm_over オプションが渡されます。
      3. doRollback が false を返した場合(チェックポイントが存在しない場合)、エラーメッセージを表示し、nextOrder を呼び出します。
    • サンプルコード:

      [checkpoint name="p1"]
      
      ;ここでいろいろ画面をつくりかえる
      
      ;チェックポイントの位置へどこからでも戻ることができる
      [rollback checkpoint="p1"]

    7.13. [clear_checkpoint]

    • グループ: システム操作

    • タイトル: チェックポイントの削除

    • 説明:

      • [checkpoint] タグで保存したチェックポイントデータを削除します。
      • name を指定しない場合は、すべてのチェックポイントが削除されます。
    • パラメータ:

      • name: (任意) 削除するチェックポイントの名前。 (デフォルト値: "")
    • 期待される動作:

      1. pm.name が空文字列の場合、kag.stat.checkpoint を空のオブジェクト {} で初期化します。
      2. pm.name が指定されている場合、kag.stat.checkpoint から指定されたキーを持つプロパティを削除します (delete)。
      3. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      ;チェックポイントの作成
      [checkpoint name="p1"]
      
      [clear_checkpoint name="p1"]

    7.14. [start_keyconfig], [stop_keyconfig]

    • グループ: システム操作
    • タイトル: キーコンフィグ操作の有効化 / キーコンフィグ操作の無効化
    • 説明:
      • [start_keyconfig] は、キーボードやマウス、ゲームパッドによる操作(キーコンフィグで定義されたアクション)を有効にします。
      • [stop_keyconfig] は、これらの操作を一時的に無効にします。
    • パラメータ: (なし)
    • 期待される動作:
      • [start_keyconfig]:
        1. kag.stat.enable_keyconfig を true に設定します。
        2. 次のタグへ進みます (nextOrder)。
      • [stop_keyconfig]:
        1. kag.stat.enable_keyconfig を false に設定します。
        2. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    キーコンフィグが有効[p] 
    
    [stop_keyconfig] 
    
    ここは無効[p] 
    
    ここも無効[p]
     
    [start_keyconfig] 
    
    ここからまた有効[p]

    7.15. [close]

    • グループ: システム操作
    • タイトル: ウィンドウを閉じる
    • 説明:
      • ゲームウィンドウまたはブラウザタブを閉じます。
    • パラメータ:
      • ask: (任意) 閉じる前に確認ダイアログを表示するか (true or false)。 (デフォルト値: "true")
    • 期待される動作:
      1. pm.ask が "true" の場合:
        • 確認ダイアログ ($.confirm) を表示します。
        • 「はい」が選択された場合、close() メソッドを呼び出します。
        • 「いいえ」が選択された場合、nextOrder を呼び出します。
      2. pm.ask が "false" の場合、直接 close() メソッドを呼び出します。
      3. close() メソッド内部:
        • window.close() を呼び出します。
        • アプリ環境 (navigator.app) なら navigator.app.exitApp() を呼び出します。
        • NW.js環境 (require("nw.gui")) なら require("nw.gui").Window.get().close() を呼び出します。

    7.16. [screen_full]

    • グループ: システム操作
    • タイトル: フルスクリーン
    • 説明:
      • ゲーム画面のフルスクリーン表示とウィンドウ表示を切り替えます。PC環境でのみ動作します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.menu.screenFull() を呼び出します。
      2. screenFull() 内部で、現在のフルスクリーン状態を確認し、適切なAPI (requestFullscreen, exitFullscreen など) を呼び出して状態を切り替えます。
      3. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [screen_full]

    7.17. [dialog]

    • グループ: システム操作

    • タイトル: ダイアログ表示

    • 説明:

      • シンプルなダイアログボックスを表示します。alert (警告)、confirm (確認)、input (入力) の3タイプがあります。
      • input タイプは非推奨です。
      • confirm または input でボタンが押された後、指定された storage / target にジャンプできます。
    • パラメータ:

      • type: (任意) ダイアログの種類 (alert, confirm, input)。 (デフォルト値: "alert")
      • name: (任意) type="input" の場合、入力内容を格納する変数名。 (デフォルト値: "tf.dialog_value")
      • text: (任意) ダイアログに表示するメッセージ。 (デフォルト値: "")
      • storage, target: (任意) OKボタン押下時のジャンプ先。両方省略時は nextOrder。
      • storage_cancel, target_cancel: (任意) Cancelボタン押下時のジャンプ先。両方省略時は nextOrder。
      • label_ok: (任意) OKボタンのテキスト。 (デフォルト値: "OK")
      • label_cancel: (任意) Cancelボタンのテキスト。 (デフォルト値: "Cancel")
    • 期待される動作:

      1. リモーダルウィンドウのOK/Cancelボタンのテキストを設定します (#remodal-confirm, #remodal-cancel)。
      2. type="confirm" の場合:
        • $.confirm を呼び出して確認ダイアログを表示します。
        • OK時、Cancel時それぞれのコールバックで finish(pm) を呼び出します (Cancel時は pm.storage, pm.target を cancel 用の値で上書き)。
      3. type="input" の場合:
        • alertify.prompt を呼び出して入力ダイアログを表示します。
        • OK時、入力内容を変数 (pm.name) に格納し、finish(pm) を呼び出します。
        • Cancel時、pm.storage, pm.target を cancel 用の値で上書きし、finish(pm) を呼び出します。
      4. type="alert" の場合:
        • $.alert を呼び出して警告ダイアログを表示します。
        • OK時、finish(pm) を呼び出します。
      5. finish(pm) 内部:
        • pm.storage または pm.target が指定されていれば、[jump] タグを実行します。
        • そうでなければ nextOrder を呼び出します。
    • サンプルコード:

      ;警告
      [dialog type="alert" text="ここから先は危険地帯です"]
      
      ;確認してOKならシナリオジャンプ
      [dialog type="confirm" text="本当に進みますか?" target="ok" target_cancel="cancel"]
      
      *ok
      進みます[p]
      [jump target=input]
      
      *cancel
      進みませんでした[p]
      [jump target=input]
      
      *input
      ;inputは廃止予定!!
      ;入力
      [dialog type="input" name="f.name" text="名前を教えてください" target="next"]
      
      *next
      あなたの名前は[emb exp="f.name"]ですね[s]

    7.18. [apply_local_patch]

    • グループ: システム操作
    • タイトル: パッチファイルの適用
    • 説明: (V470以降, PCアプリのみ)
      • ローカルにあるパッチファイル (.tpatch) を現在のゲームデータに適用します。
    • パラメータ:
      • file: (必須) パッチファイルのパス (exeファイルからの相対パス)。
      • reload: (任意) 適用後にゲームを再起動するか (true or false)。 (デフォルト値: "false")
    • 期待される動作:
      1. PCアプリ環境でなければ nextOrder を呼び出して終了します。
      2. パッチファイルの絶対パス (patch_path) を構築します。
      3. kag.applyPatch(patch_path, pm.reload, callback) を呼び出します。
      4. applyPatch 内部 (非同期):
        • パッチファイルが存在しなければコールバックを呼び出して終了します。
        • asar パッケージ化されているかどうか (unzip_path) を確認します。
        • asar の場合:
          • 一時フォルダ (update_tmp) を作成します。
          • 現在の app.asar を一時フォルダに展開します (asar.extractAll)。
          • パッチファイル (.tpatch, 実体はzip) を一時フォルダに展開・上書きします (AdmZip.extractAllTo)。
          • 一時フォルダの内容から新しい app.asar を作成します (asar.createPackage)。
          • 完了メッセージを表示し、パッチファイルと一時フォルダを削除し、ウィンドウを閉じます。
        • asar でない場合:
          • パッチファイルを一時フォルダ (update_tmp) に展開します。
          • 一時フォルダの内容を現在のゲームフォルダに上書きコピーします (fse.copySync)。
          • 一時フォルダとパッチファイルを削除します。
          • 完了メッセージを表示し、reload="true" ならリロードします。
      5. applyPatch のコールバック内で nextOrder を呼び出します (リロードしない場合)。
    • サンプルコード:
    [apply_local_patch file="test.tpatch" ]

    7.19. [check_web_patch]

    • グループ: システム操作
    • タイトル: アップデートのチェック
    • 説明: (V470以降, PCアプリのみ)
      • 指定されたURLにある json ファイルを読み込み、ゲームのバージョンと比較して、新しいパッチが存在すればユーザーに通知し、ダウンロードと適用(再起動が必要)を促します。
    • パラメータ:
      • url: (必須) パッチ情報が記述された json ファイルのURL。
    • 期待される動作:
      1. PCアプリ環境でなければ nextOrder を呼び出して終了します。
      2. 指定された url に AJAX リクエストを送信します。
      3. 成功時 (success):
        • 受信したJSONデータをパースします。
        • checkPatch(json, pm) を呼び出します。
      4. 失敗時 (error):
        • エラーログを出力し、エラーメッセージを表示します。
      5. checkPatch 内部:
        • 現在のパッチバージョン (sf._patch_version) と JSON内のバージョンを比較します。
        • JSON内のバージョンの方が新しい場合:
          • 確認ダイアログ ($.confirm) を表示します。
          • 「はい」の場合:
            • 適用メッセージを表示します。
            • JSON内の file に基づいてパッチファイル (.tpatch) のURLを構築します。
            • http.get (または https.get) を使用してパッチファイルをダウンロードし、ローカルに保存します。
            • ダウンロード完了後 (res.on("end")):
              • sf._patch_version を更新します。
              • ウィンドウを閉じます (再起動を促す)。
          • 「いいえ」の場合、nextOrder を呼び出します。
        • バージョンが同じか古い場合は、nextOrder を呼び出します。
    • サンプルコード:
    [check_web_patch url="http://tyrano.jp/patch/mygame.json" ]

    7.20. [closeconfirm_on], [closeconfirm_off]

    • グループ: システム操作
    • タイトル: 終了時の確認の有効化 / 終了時の確認の無効化
    • 説明:
      • [closeconfirm_on] を通過すると、ゲームが未保存状態(最後にセーブ/ロードしてからタグが1つ以上進んだ状態)でウィンドウ/タブを閉じようとした際に確認ダイアログが表示されるようになります。
      • [closeconfirm_off] を通過すると、この確認ダイアログが表示されなくなります。
    • パラメータ: (なし)
    • 期待される動作:
      • [closeconfirm_on]:
        1. kag.stat.use_close_confirm を true に設定します。
        2. 次のタグへ進みます (nextOrder)。(nextOrder 内部で $.enableCloseConfirm() が呼ばれ、beforeunload イベントが設定されます)
      • [closeconfirm_off]:
        1. kag.stat.use_close_confirm を false に設定します。
        2. $.disableCloseConfirm() を呼び出して beforeunload イベントを解除します。
        3. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    ここで閉じようとしても終了時の確認はない[p] 
    ここで閉じようとしても終了時の確認はない[p] 
    
    [closeconfirm_on] 
    
    ここから未保存状態で閉じようとすると終了時の確認が出る[p] 
    ここから未保存状態で閉じようとすると終了時の確認が出る[p] 
    
    [closeconfirm_off] 
    
    ここで閉じようとしても終了時の確認はない[p] 
    ここで閉じようとしても終了時の確認はない[p]

    8. システムデザイン変更関連タグ

    8.1. [body]

    • グループ: システムデザイン変更
    • タイトル: ゲーム画面外の設定
    • 説明:
      • ゲーム画面の外側の領域(HTMLの <body> 要素)の背景色や背景画像を変更します。
      • ゲーム画面自体のサイズ (scWidth, scHeight) を動的に変更することも可能です。
    • パラメータ:
      • bgimage: (任意) 背景画像ファイル。data/bgimage から読み込みます。transparent で透明化。 (デフォルト値: "")
      • bgrepeat: (任意) 背景画像の繰り返し方法 (repeat, repeat-x, repeat-y, no-repeat, round)。 (デフォルト値: "")
      • bgcolor: (任意) 背景色 (0xRRGGBB形式)。bgimage 指定時は無視。 (デフォルト値: "")
      • bgcover: (任意) 背景画像を全体に引き伸ばすか (true or false)。 (デフォルト値: "false")
      • scWidth, scHeight: (任意) ゲーム画面のオリジナルの幅/高さ (px)。変更した場合、リサイズイベントが発火します。 (デフォルト値: "")
    • 期待される動作:
      1. bgcolor が指定されていれば $("body") の background-color を設定します。
      2. bgimage が指定されていれば:
        • "transparent" なら layer=base を非表示にし、body と .tyrano_base の背景を透明にします。
        • それ以外なら $("body") の background-image を設定します。
      3. bgrepeat が指定されていれば background-repeat を設定します。
      4. bgcover="true" なら background-size: cover を設定します。
      5. scWidth, scHeight が現在の値と異なる場合:
        • kag.config.scWidth/scHeight を更新します。
        • .tyrano_base, .layer の width/height を更新します。
        • リサイズフラグ (flag_resize) を立てます。
      6. flag_resize が立っていれば、$(window).trigger("resize") を呼び出して画面の再描画を促します。
      7. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [body bgimage="back.png" bgcolor="black" ]

    8.2. [title]

    • グループ: システムデザイン変更
    • タイトル: タイトル指定
    • 説明:
      • ゲームウィンドウのタイトルバーやブラウザのタブに表示されるタイトル文字列を変更します。
    • パラメータ:
      • name: (必須) 新しく設定するタイトル文字列。
    • 期待される動作:
      1. pm.name が空でなければ kag.setTitle(pm.name) を呼び出します。
      2. setTitle 内部で kag.stat.title を更新し、document.title を設定します。
      3. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [title name="変更後のタイトル"]

    8.3. [save_img]

    • グループ: システムデザイン変更
    • タイトル: セーブデータのサムネイル変更
    • 説明:
      • セーブデータ一覧画面に表示されるサムネイル画像を、現在のゲーム画面のキャプチャではなく、指定した画像ファイルに変更します。
      • storage="default" を指定すると、通常の画面キャプチャに戻ります。
    • パラメータ:
      • storage: (任意) サムネイルに使用する画像ファイル名。defaultで画面キャプチャ。 (デフォルト値: "")
      • folder: (任意) 画像を読み込むフォルダ。 (デフォルト値: "bgimage")
    • 期待される動作:
      1. pm.storage が空なら "default" に設定します。
      2. folder が未指定なら "bgimage" を使用します。
      3. 画像パス (storage_url) を構築します。pm.storage が "default" なら空文字列にします。
      4. kag.stat.save_img に storage_url を設定します。これにより、次回セーブ時にこの画像がサムネイルとして使用されます。
      5. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    ;サムネイル画像の変更 
    [save_img storage="my_capture.png" ]

    8.4. [cursor]

    • グループ: システムデザイン変更

    • タイトル: マウスカーソルに画像を設定

    • 説明:

      • マウスカーソルの表示画像を変更します。デフォルトカーソルと、ボタンなどに乗せたときのポインターカーソルを個別に設定できます。
      • マウスの自動非表示やクリックエフェクトの設定も可能です。
    • パラメータ:

      • storage: (任意) カーソル画像ファイル名。data/image から読み込みます。default で標準カーソル。 (デフォルト値: "")
      • x, y: (任意) カーソルのホットスポット座標 (px)。 (デフォルト値: "0")
      • type: (任意) 変更するカーソルの種類 (default または pointer)。 (デフォルト値: "default")
      • auto_hide: (任意) 自動非表示 (true, false, または非表示までの時間(ミリ秒))。 (デフォルト値: "")
      • click_effect: (任意) クリックエフェクトを有効にするか (true or false)。 (デフォルト値: "")
      • e_*: (任意) クリックエフェクトの詳細設定 (e_width, e_opacity, e_time, e_color, e_blend, e_scale)。
      • next: (任意) false を指定すると nextOrder を呼び出しません。 (デフォルト値: "true")
    • 期待される動作:

      1. storage が指定されている場合:
        • type="default" なら kag.setCursor(pm) を呼び出し、body の cursor スタイルと仮想マウスのデフォルト画像を設定します。
        • type="pointer" など他の値なら、kag.stat.current_cursor_map に情報を格納し、overwriteCSS() を呼び出して <style> タグを生成・更新し、ポインター要素の cursor スタイルを上書きします。仮想マウスの画像情報も更新します。
      2. auto_hide が指定されている場合:
        • "false" なら自動非表示を無効化し、関連イベントを解除します。
        • true または数値なら自動非表示を有効化し、mousemove イベントリスナを設定して、一定時間マウス操作がない場合にカーソルを非表示にする処理を実装します。
      3. click_effect が指定されている場合:
        • kag.stat.click_effect.is_enabled を更新します。
        • true ならクリック/ポインターダウンイベントリスナを設定し、showEffect を呼び出すようにします。
        • false ならイベントリスナを解除します。
      4. e_* パラメータが指定されていれば、kag.stat.click_effect 内の対応するプロパティを更新します。
      5. 仮想マウスカーソルの画像を更新します (vmouse.refreshImage())。
      6. pm.next が "false" でない場合、次のタグへ進みます (nextOrder)。
    • サンプルコード:

      ;デフォルトのマウスカーソル画像を変更
      [cursor storage="my_cursor_32x32.png"]
      
      ;ボタンの上にマウスカーソルを乗せたときの画像を変更
      [cursor storage="my_cursor_pointer_32x32.png" type="pointer"]
      
      ;一定時間マウスの操作がなかった場合にマウスカーソルを非表示にする
      [cursor auto_hide="true"]
      
      ;クリックエフェクトを有効にする
      [cursor click_effect="true"]
      
      ;クリックエフェクトの設定変更
      [cursor e_width="200" e_color="0xff0000" e_time="600" e_scale="200" e_blend="normal" e_opacity="100"]
      
      ;クリックエフェクトの設定変更(デフォルト設定)
      [cursor e_width="100" e_color="0xffffff" e_time="300" e_scale="120" e_blend="overlay" e_opacity="204"]

    8.5. [showmenubutton], [hidemenubutton]

    • グループ: システムデザイン変更
    • タイトル: メニューボタンの表示 / メニューボタンの非表示
    • 説明:
      • 画面右下などに表示されるメニューボタン(歯車アイコンなど)の表示/非表示を切り替えます。
    • パラメータ ([showmenubutton]):
      • keyfocus: (任意) キーボード/ゲームパッドでのフォーカスを有効にするか、またはフォーカス順序を指定。 (デフォルト値: "false")
    • パラメータ ([hidemenubutton]): (なし)
    • 期待される動作:
      • [showmenubutton]:
        1. .button_menu 要素を表示 (show()) します。
        2. kag.makeFocusable() でフォーカス可能にします。
        3. kag.stat.visible_menu_button を true に設定します。
        4. kag.config.configVisible を "true" に設定します。
        5. 次のタグへ進みます (nextOrder)。
      • [hidemenubutton]:
        1. .button_menu 要素を非表示 (hide()) にします。
        2. kag.stat.visible_menu_button を false に設定します。
        3. kag.config.configVisible を "false" に設定します。
        4. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [showmenubutton]
    [hidemenubutton]

    8.6. [sysview]

    • グループ: システムデザイン変更
    • タイトル: システム画面変更
    • 説明:
      • セーブ、ロード、バックログ、メニュー画面で使用されるHTMLファイルのパスを変更します。これにより、これらの画面のデザインをカスタマイズできます。
    • パラメータ:
      • type: (必須) 変更する画面の種類 (save, load, backlog, menu)。
      • storage: (必須) 新しく使用するHTMLファイルのパス。
    • 期待される動作:
      1. 指定された type のHTMLキャッシュ (kag.cache_html[type]) を削除します。
      2. kag.stat.sysview[type] に新しいHTMLファイルのパス (pm.storage) を設定します。
      3. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [sysview type="save" storage="./data/others/plugin/mytheme/html/save.html" ]
    [sysview type="load" storage="./data/others/plugin/mytheme/html/load.html" ]
    [sysview type="backlog" storage="./data/others/plugin/mytheme/html/backlog.html" ]
    [sysview type="menu" storage="./data/others/plugin/mytheme/html/menu.html"]

    8.7. [loadcss]

    • グループ: 変数・JS操作・ファイル読込
    • タイトル: CSS反映
    • 説明:
      • 外部CSSファイルを動的に読み込み、スタイルを適用します。
    • パラメータ:
      • file: (必須) 読み込むCSSファイルのパス (data/ から記述)。
    • 期待される動作:
      1. <link> 要素を生成し、href 属性に pm.file (+キャッシュ対策の乱数) を設定します。
      2. 生成した <link> 要素を <head> 内の最後の <link> 要素の後に追加します。
      3. keyFocusWithHoverStyle コンフィグが有効な場合、CSSロード完了時に :hover スタイルを :focus.focus にコピーする処理 ($.copyHoverCSSToFocusCSS) をイベントリスナとして設定します。
      4. 読み込んだファイルパスを kag.stat.cssload[file] に記録します。
      5. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    ;CSSファイルの読み込み 
    [loadcss file="./data/others/css/mystyle.css" ]

    8.8. [set_resizecall]

    • グループ: システムデザイン変更

    • タイトル: レスポンシブデザイン対応

    • 説明:

      • 画面の向き(縦長/横長)が変わったときに呼び出されるシナリオファイルとラベルを指定します。
      • これにより、画面レイアウトの動的な変更(レスポンシブデザイン)に対応できます。
      • 呼び出されたシナリオでは、最後に [return] タグを実行する必要があります。
    • パラメータ:

      • storage: (必須) 呼び出すシナリオファイル名。
      • target: (任意) 呼び出すラベル名。 (デフォルト値: "")
    • 期待される動作:

      1. kag.stat.resizecall.storage と kag.stat.resizecall.target を pm の値で更新します。
      2. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      [call storage="resize.ks"]
      
      ;画面比率が変わったタイミングでresize.ksを呼び出す、という宣言
      [set_resizecall storage="resize.ks" ]

    8.9. [dialog_config], [dialog_config_ok], [dialog_config_ng], [dialog_config_filter]

    • グループ: システムデザイン変更
    • タイトル: 確認ダイアログのデザイン変更
    • 説明:
      • $.confirm などで表示される確認ダイアログ (リモーダルウィンドウ) のデザインを変更します。
      • [dialog_config] は全体的な設定(背景、フォント、ボックス、アニメーションなど)。
      • [dialog_config_ok] はOKボタン固有の設定。
      • [dialog_config_ng] はキャンセルボタン固有の設定。
      • [dialog_config_filter] はダイアログ背景に適用するフィルター効果。
      • これらのタグで変更した内容はセーブ/ロードで復元されません。通常は first.ks などゲーム開始前に記述します。
    • パラメータ:
      • [dialog_config]: btntype, btnwidth, btnmargin, btnpadding (ボタン共通), fontsize, fontbold, fontface, fontcolor (メッセージ), btnfontsize, btnfontbold, btnfontface, btnfontcolor (ボタンテキスト), boxcolor, boxopacity, boxradius, boxwidth, boxheight, boxpadding, boximg, boximgpos, boximgrepeat, boximgsize (メッセージボックス), bgcolor, bgopacity, bgimg, bgimgpos, bgimgrepeat, bgimgsize (ダイアログ外背景), openeffect, opentime, closeeffect, closetime (開閉アニメーション), gotitle (タイトルへ戻る確認文言), okpos (OKボタン位置 left/right), ingame (trueでゲーム画面内に表示)
      • [dialog_config_ok], [dialog_config_ng]: text, type, width, margin, padding, fontsize, fontbold, fontface, fontcolor, img, imgwidth, enterimg, activeimg, clickimg, enterse, leavese, clickse, btnimgtype (bgで背景画像化)
      • [dialog_config_filter]: layer, name, grayscale, sepia, saturate, hue, invert, opacity, brightness, contrast, blur ([filter] と同様)
    • 期待される動作:
      1. 初回実行時に init() で関連するjQueryオブジェクト (j_overlay, j_box, j_button など) を取得・生成し、プロパティに保持します。
      2. [dialog_config]: 指定されたパラメータに基づき、対応する要素のCSSスタイルや内部状態 (kag.tmp.remodal_*) を更新します。
      3. [dialog_config_ok/ng]: changeButton(pm, is_ok) を呼び出します。
        • pm.img が指定されている場合は replaceButton() を呼び出し、<button> を <img> に置き換えます。
        • そうでなければ、対象ボタン (j_ok または j_cancel) のテキスト、クラス、スタイル、イベントリスナ(ホバー/クリック音、画像切替など)を更新します。背景画像を使用する場合は内部のCSSマップを更新します。
      4. [dialog_config_filter]: [filter] タグの buildFilterPropertyValue を利用してフィルタ文字列を生成し、.remodal-base 要素の backdrop-filter スタイルを設定します。
      5. 各タグの最後で nextOrder() を呼び出します。
    • サンプルコード:
    [dialog_config bgimg="pattern.jpg" bgimgrepeat="repeat" bgopacity="66"]
    [dialog_config boxradius="20" boxcolor="#F0E3FD" boximg="../bgimage/title.jpg" boximgpos="right bottom" boximgsize="200" boxopacity="200"] 
    [dialog_config openeffect="rotateIn" opentime="800" closeeffect="rotateOut" closetime="800"] 
    [dialog_config_ok text="いいですよ"] [dialog_config_ok width="200" margin="10,30" type="btn_04_green"] 
    
    ;画像ボタンにする場合はひとつのタグで記述 
    [dialog_config_ok img="dialog/ok.png" width="100" margin="20" enterimg="dialog/ok_enter.png" activeimg="dialog/ok_active.png" clickimg="dialog/ok_click.png" enterse="lab1.mp3" leavese="lab2.mp3" clickse="lab3.mp3"] 
    [dialog_config_ng text="ダメです"] 
    [dialog_config_filter blur="15"]

    8.10. [mode_effect]

    • グループ: システムデザイン変更
    • タイトル: モード変化エフェクト
    • 説明:
      • スキップ/オート/ホールドスキップモードの開始・停止時に、画面中央にアイコンや画像を表示するエフェクトを設定します。
    • パラメータ:
      • skip, auto, stop, holdskip, holdstop, all: (任意) 各モード変化時に表示する内容 (none, default, または画像ファイルパス)。all で一括指定可。
      • env: (任意) 設定対象の環境 (all, pc, phone)。 (デフォルト値: "all")
      • width, height: (任意) エフェクト画像のサイズ (px)。
      • color: (任意) default エフェクト時の図形の色。
      • bgcolor: (任意) default エフェクト時の背景円の色。
    • 期待される動作:
      1. pm.all が指定されていれば、他のモード変化パラメータ (skip, auto など) が未指定の場合に pm.all の値で補完します。
      2. pm.env に基づいて対象環境 (target_env_keys) を決定します。
      3. 各対象環境 (env_key) について、kag.tmp.mode_effect[env_key] マップを更新します。
        • 各モード (skip, auto など) について、storage (内容指定) と width, height, color, bgcolor を格納します。
      4. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [mode_effect all="default" holdskip="none" holdstop="none"]

    8.11. [loading_log]

    • グループ: システムデザイン変更
    • タイトル: ローディングログ
    • 説明:
      • 素材読み込み (preload) やセーブ処理 (savesnap) 中に、画面端に「Loading…」のようなテキストとアイコンを表示する設定を行います。
    • パラメータ:
      • preload, save, all: (任意) 各タイミングで表示するテキスト (none, default, notext, または任意の文字列)。all で一括指定可。
      • dottime: (任意) テキスト末尾の「…」アニメーションの時間 (ミリ秒)。0で無効化。 (デフォルト値: 1500)
      • icon: (任意) ローディングアイコンを表示するか (true or false)。 (デフォルト値: "true")
      • mintime: (任意) ログを最低限表示する時間 (ミリ秒)。これより短い時間で処理が終わっても、この時間だけはログが表示されます。 (デフォルト値: 20)
      • left, top, right, bottom: (任意) ログ表示位置 (px)。 (デフォルト値: "")
    • 期待される動作:
      1. 初回実行時に init() でログ表示用の要素 (#tyrano-loading) を生成・取得し、関連する kag.stat と kag.tmp プロパティを初期化します。
      2. pm.all が指定されていれば、preload, save が未指定の場合に pm.all の値で補完します。
      3. 指定されたパラメータに基づき、kag.stat.loading_log オブジェクトの各プロパティ (min_time, dot_time, use_icon, message_map) を更新します。
      4. left, top, right, bottom が指定されていれば、#tyrano-loading 要素のCSSスタイルを更新します。
      5. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [loading_log all="default"]

    8.12. [lang_set]

    • グループ: システムデザイン変更
    • タイトル: 言語の切替
    • 説明:
      • ゲーム内で使用する言語設定ファイルを読み込み、切り替えます。
      • 指定された言語名の .json ファイル (data/others/lang/ 内) を読み込み、内部の翻訳情報を kag.map_lang に格納します。
      • 切り替え後、現在のシナリオファイルを再読み込みして翻訳を適用します。
    • パラメータ:
      • name: (必須) 切り替える言語名 (en, cn など)。default でローカライズを無効化。
    • 期待される動作:
      1. pm.name が "default" でない場合:
        • 対応する言語ファイル (./data/others/lang/ + pm.name + .json) を非同期で読み込みます ($.loadTextSync)。
        • 読み込み成功時、kag.lang を pm.name に、kag.map_lang をパースしたJSONデータに設定します。
        • 読み込み失敗時、kag.lang と kag.map_lang をリセットします。
      2. pm.name が "default" の場合、kag.lang と kag.map_lang をリセットします。
      3. シナリオキャッシュ (kag.cache_scenario) をクリアします。
      4. システム変数 sf._system_config_lang に pm.name を保存します。
      5. 現在のシナリオファイル (kag.stat.current_scenario) を再読み込み (kag.loadScenario) します。
      6. 再読み込み完了後、コールバック内でタグ配列 (kag.ftag.array_tag) を更新し、nextOrder を呼び出します。
    • サンプルコード:
    [lang_set name="en"]

    9. 入力フォーム関連タグ

    9.1. [edit]

    • グループ: 入力フォーム

    • タイトル: テキストボックス

    • 説明:

      • プレイヤーがテキストを入力できるテキストボックス (<input type="text">) を画面上に表示します。
      • テキストボックス表示中はシナリオ進行が停止します。必ず [glink] や [button] などでジャンプできるようにしてください。
      • 入力された内容は [commit] タグ実行時に指定された変数に格納されます。
    • パラメータ:

      • name: (必須) 入力内容を格納する変数名 (f.player_name など)。
      • initial: (任意) テキストボックスの初期値。 (デフォルト値: "")
      • placeholder: (任意) 入力欄が空の時に表示されるプレースホルダーテキスト。 (デフォルト値: "")
      • color: (任意) 文字色。 (デフォルト値: "black")
      • left, top: (任意) テキストボックスの表示位置 (px)。 (デフォルト値: "0")
      • size: (任意) フォントサイズ (px)。 (デフォルト値: "20")
      • face: (任意) フォント名。省略時はデフォルトフォント。 (デフォルト値: "")
      • width: (任意) テキストボックスの横幅 (px)。 (デフォルト値: "200")
      • height: (任意) テキストボックスの高さ (px)。 (デフォルト値: "40")
      • maxchars: (任意) 最大入力文字数。 (デフォルト値: "1000")
      • autocomplete: (任意) ブラウザの自動補完を有効にするか (true or false)。 (デフォルト値: "false")
    • 期待される動作:

      1. <input class="text_box form" type="text"> 要素 (j_text) を生成します。
      2. 指定されたパラメータに基づき、CSSスタイル (color, left, top, width, height, font-size, font-family) を適用します。
      3. placeholder, maxlength, autocomplete 属性を設定します。
      4. kag.event.addEventElement でイベント情報を登録します。
      5. setEvent メソッドを呼び出して、初期値の設定、クリック時のフォーカス処理、キー入力時のイベント伝搬停止 (stopPropagation) を行います。
      6. j_text をフリーレイヤに追加し、表示します (kag.layer.getFreeLayer().append(j_text).show())。
      7. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      この子の名前を決めなければ…[l]
      
      [edit name="f.dog_name" left=50 top=100]
      [glink text="決定" target=next x=250 y=100 cm=false]
      [s]
      
      *next
      [commit name="f.dog_name"]
      [cm]
      この子の名前は「[emb exp=f.dog_name]」だ![r]
      やあ[emb exp=f.dog_name]!一緒に遊ぼう![s]

    9.2. [commit]

    • グループ: 入力フォーム
    • タイトル: フォームの確定
    • 説明:
      • [edit] タグで表示されているすべてのテキストボックスの現在の入力内容を取得し、それぞれの name 属性で指定された変数に値を格納します。
      • このタグ実行時にテキストボックスが表示されている必要があります。
    • パラメータ: (なし)
    • 期待される動作:
      1. フリーレイヤ (.layer_free) 内の .form クラスを持つ要素(現状は <input> のみ)をすべて取得します。
      2. 各要素について:
        • name 属性の値を取得します。
        • .val() で現在の入力値を取得します。
        • name + " = '" + val + "'" の形式でJavaScriptの代入文文字列を生成します。
        • kag.evalScript() で代入文を実行し、変数に値を格納します。
      3. 次のタグへ進みます (nextOrder)。
    • サンプルコード: (省略。[edit] のサンプル参照)

    10. 演出・効果・動画関連タグ

    10.1. [quake]

    • グループ: 演出・効果・動画
    • タイトル: 画面を揺らす
    • 説明:
      • 指定した回数・時間・強さでゲーム画面全体 (.tyrano_base) を揺らします。
      • jQuery UI の shake エフェクトを使用しています。
    • パラメータ:
      • count: (任意) 揺らす回数。 (デフォルト値: 5)
      • time: (必須) 1回の揺れにかかる時間 (ミリ秒)。
      • hmax: (任意) 横方向の最大振幅 (px)。 (デフォルト値: "0")
      • vmax: (任意) 縦方向の最大振幅 (px)。 (デフォルト値: "10")
      • wait: (任意) 揺れの完了を待つか (true or false)。 (デフォルト値: "true")
    • 期待される動作:
      1. hmax が "0" でない場合、.tyrano_base に対して横方向 (direction: "left") の shake エフェクトを実行します。
      2. vmax が "0" でない場合、.tyrano_base に対して縦方向 (direction: "up") の shake エフェクトを実行します。
      3. エフェクト完了後、pm.wait が "true" なら nextOrder を呼び出します。
      4. pm.wait が "false" の場合は、エフェクト開始と同時に nextOrder を呼び出します。
    • サンプルコード:
    [quake count=5 time=300 hmax=20]

    10.2. [quake2]

    • グループ: 演出・効果・動画

    • タイトル: 画面を揺らす

    • 説明: (V515以降?)

      • 指定した時間、ゲーム画面全体 (#root_layer_game, #root_layer_system) を揺らします。
      • [quake] よりも滑らかな揺れを表現できます。
    • パラメータ:

      • time: (任意) 揺れ全体の時間 (ミリ秒)。 (デフォルト値: "1000")
      • hmax: (任意) 横方向の最大振幅 (px)。 (デフォルト値: "0")
      • vmax: (任意) 縦方向の最大振幅 (px)。 (デフォルト値: "200")
      • wait: (任意) 揺れの完了を待つか (true or false)。 (デフォルト値: "true")
      • copybase: (任意) 揺れ中に背景レイヤのコピーを表示するか (true or false)。画面端のチラつき防止。 (デフォルト値: "true")
      • skippable: (任意) スキップ中にこの揺れを無視するか (true or false)。 (デフォルト値: "true")
    • 期待される動作:

      1. 前回の [quake2] が完了していなければ強制終了します。
      2. スキップ中で skippable="true" なら nextOrder を呼んで終了します。
      3. copybase="true" なら背景レイヤ (.base_fore) をクローンして最背面に配置します。
      4. アニメーションスタックをプッシュします (pushAnimStack)。
      5. 揺れ終了処理 (quake2_finish) を kag.tmp に定義します。
      6. requestAnimationFrame を使用したループ (loop) を開始します。
        • 経過フレーム数 (current_frame) と目標フレーム数 (end_frame) を比較します。
        • easeOutQuad を使用して現在の揺れ幅 (v, h) を計算します。
        • 対象要素 (j_quake) の transform: translate() スタイルを更新します。
        • ループが終了したら quake2_finish を呼び出します。
      7. ロード開始時 (load-start) とスキップ開始時 (skip-start) に quake2_finish を呼び出すイベントリスナを設定します。
      8. wait=false なら nextOrder を呼び出します。
    • サンプルコード:

      画面を揺らすよ。[l][s]
      
      [quake2 time="1000"]
      
      [cm]揺れたね。[p]
      
      [quake2 time="1000" wait="false"]
      
      揺らしたまま次のタグに進むよ。[p]
      
      [quake2 time="3000" wait="false"]
      
      揺らしたまま次のタグに進んで、揺れの完了を待つよ…[wa]終わったよ。[p]

    10.3. [vibrate], [vibrate_stop]

    • グループ: 演出・効果・動画

    • タイトル: スマホ・パッドの振動 / スマホ・パッドの振動停止

    • 説明:

      • [vibrate] はモバイル端末や接続されているゲームパッドを振動させます。
      • time にカンマ区切りで数値を指定することで、振動と静止を繰り返すパターンを作成できます。
      • [vibrate_stop] は進行中の振動を停止させます。
    • パラメータ ([vibrate]):

      • time: (任意) 振動時間(ミリ秒)または振動パターンの配列 ("600,200,600")。 (デフォルト値: "500")
      • power: (任意) 振動の強さ (0-100)。ゲームパッドのみ有効。 (デフォルト値: "100")
      • count: (任意) 振動パターンを繰り返す回数。 (デフォルト値: "")
    • パラメータ ([vibrate_stop]): (なし)

    • 期待される動作:

      • [vibrate]:
        1. time をパースして数値または数値配列 time_val を生成します。
        2. power をパースして 0.0〜1.0 の値にします。
        3. count が指定されていれば、time_val を指定回数繰り返した新しい配列を作成します。
        4. ゲームパッドが最後に使用されたか (last_used_next_gamepad_index > -1) を確認します。
        5. ゲームパッドが使用されていれば kag.key_mouse.gamepad.vibrate() を呼び出し、そうでなければ navigator.vibrate() を呼び出して振動を開始します。パターン指定の場合は setTimeout で再帰的に呼び出します。
        6. 次のタグへ進みます (nextOrder)。
      • [vibrate_stop]:
        1. kag.key_mouse.gamepad.vibrate({ duration: 0, power: 0 }) と navigator.vibrate(0) を呼び出して振動を停止します。
        2. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      [vibrate time=1000 power=100]
      1秒振動[p]
      
      [vibrate time="800,200" power="50" count="3"]
      パターン振動を3回繰り返し[p]
      
      [vibrate time="5000" power="50" count="3"]
      途中で振動停止…
      [wait time="1000"]
      [vibrate_stop]
      停止させました。[p]

    10.4. [movie]

    • グループ: 演出・効果・動画

    • タイトル: 動画の再生

    • 説明:

      • ゲーム画面全体に動画を再生します。再生終了後、または skip=true 時にクリックされると次のタグに進みます。
      • 動画ファイルは data/video フォルダに配置します。
    • パラメータ:

      • storage: (必須) 再生する動画ファイル名。
      • skip: (任意) クリックによるスキップを許可するか (true or false)。 (デフォルト値: "false")
      • mute: (任意) 音声をミュートするか (true or false)。trueで自動再生制限を回避しやすくなります。 (デフォルト値: "false")
      • volume: (任意) 音量 (0-100)。省略時は Config.tjs の defaultMovieVolume を参照。 (デフォルト値: "")
      • bgmode: (任意) 【内部用】背景動画モードか。 (デフォルト値: "false")
      • loop: (任意) 【内部用】ループ再生するか。 (デフォルト値: "false")
    • 期待される動作:

      1. ユーザー環境に応じて動画ファイル形式を調整します (Firefox/Opera では .mp4 → .webm)。
      2. <video> 要素を生成します。
      3. src, volume, autoplay, playsinline, muted, loop 属性を設定します。
      4. CSS スタイル (全画面表示、黒背景など) を設定します。
      5. ended イベントリスナを設定します。再生終了時に nextOrder を呼び出すようにします (bgmode=false の場合)。
      6. skip=true の場合、クリック/タッチイベントリスナを設定し、クリック時に動画を削除して nextOrder を呼び出すようにします (bgmode=false の場合)。
      7. <video> 要素を .tyrano_base に追加し、.animate({opacity:1}) でフェードインさせます (ただし time パラメータは存在しないため、実質的な効果はない可能性があります)。
      8. video.load() と video.play() を呼び出して再生を開始します。canplay イベントで display スタイルを設定して再生ボタンのチラつきを防ぎます。
    • サンプルコード:

      ;動画を再生した回数をゲーム変数f.watch_countで数えてみる
      [eval exp="f.watch_count = 0"]
      
      *loop
      動画を再生するよ[p]
      
      ;動画を再生したことがまだ1回もないなら、スキップできない
      ;動画を再生したことが1回以上あるなら、スキップできる
      ;という設定を一時変数tf.skipにをセット
      [iscript]
      if (f.watch_count === 0) {
        tf.skip = "false";
      } else {
        tf.skip = "true";
      }
      [endscript]
      
      ;data/video/cat.mp4を再生するよ
      [movie storage="cat.mp4" skip=&tf.skip]
      
      動画を再生しおわったよ[p]
      
      ;動画を再生した回数を増やす
      [eval exp="f.watch_count += 1"]
      [jump target="loop"]

    10.5. [bgmovie]

    • グループ: 演出・効果・動画
    • タイトル: 背景ムービーの再生
    • 説明:
      • ゲーム画面の背景として動画を再生します。PC環境限定です。
      • [stop_bgmovie] が実行されるまで再生され続けます (loop=true の場合)。
    • パラメータ:
      • storage: (必須) 再生する動画ファイル名。data/video から。
      • time: (任意) フェードイン時間 (ミリ秒)。 (デフォルト値: "300")
      • mute: (任意) 音声をミュートするか (true or false)。 (デフォルト値: "false")
      • volume: (任意) 音量 (0-100)。 (デフォルト値: "")
      • loop: (任意) ループ再生するか (true or false)。 (デフォルト値: "true")
    • 期待される動作:
      1. kag.stat.current_bgmovie に storage と volume を保存します。
      2. すでに背景動画が再生中 (kag.tmp.video_playing == true) の場合:
        • 現在の動画のループを停止 (video.loop = false) します。
        • kag.stat.video_stack に pm を格納します。これにより、現在の動画再生終了後に新しい動画が再生されます。
        • nextOrder を呼び出して終了します。
      3. 背景動画が再生中でない場合:
        • pm に skip="false", bgmode="true" を追加します。
        • [movie] タグを内部的に呼び出して動画再生を開始します。
        • 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    [bgmovie storage=cat.mp4]

    10.6. [wait_bgmovie]

    • グループ: 演出・効果・動画
    • タイトル: 背景ムービーの再生完了を待つ
    • 説明:
      • 現在再生中の背景ムービー ([bgmovie] で再生したもの) の再生完了を待ちます。
      • 対象の動画がループ再生 (loop=true) に設定されていた場合、このタグ実行時にループが解除され、現在の再生が完了した時点で次に進みます。
    • パラメータ: (なし)
    • 期待される動作:
      1. 背景動画が再生中 (kag.tmp.video_playing == true) の場合:
        • kag.stat.is_wait_bgmovie を true に設定します。
        • 背景動画要素 (#bgmovie) の loop 属性を false に設定します。動画の ended イベントハンドラ内で is_wait_bgmovie がチェックされ、true なら nextOrder が呼ばれます。
      2. 背景動画が再生中でない場合、即座に nextOrder を呼び出します。

    10.7. [stop_bgmovie]

    • グループ: 演出・効果・動画

    • タイトル: 背景ムービーの停止

    • 説明:

      • [bgmovie] で再生している背景動画を停止し、画面から削除します。
    • パラメータ:

      • time: (任意) フェードアウト時間 (ミリ秒)。 (デフォルト値: "300")
      • wait: (任意) フェードアウト完了を待つか (true or false)。 (デフォルト値: "true")
    • 期待される動作:

      1. kag.tmp.video_playing を false に設定します。
      2. kag.stat.current_bgmovie をリセットします。
      3. .tyrano_base 内のすべての <video> 要素に対して .animate({opacity:0}) を実行します。
      4. アニメーション完了後、要素を削除 (remove()) し、wait=true なら nextOrder を呼び出します。
      5. 対象の <video> 要素が存在しない場合は即座に nextOrder を呼び出します。
      6. wait=false の場合は、アニメーション開始と同時に nextOrder を呼び出します。
    • サンプルコード:

      [bgmovie storage=cat.mp4]
      動画を停止します[p]
      
      [stop_bgmovie]
      動画を停止しました[p]

    10.8. [layermode]

    • グループ: 演出・効果・動画
    • タイトル: レイヤーモード
    • 説明:
      • ゲーム画面全体に画像または単色を重ね、指定したブレンドモードで合成します。
      • 乗算、スクリーン、オーバーレイなど、様々な合成効果を表現できます。
      • IEなど一部ブラウザ非対応。
    • パラメータ:
      • name: (任意) この合成レイヤに名前を付けます。[free_layermode] で個別に削除する際に使用。 (デフォルト値: "")
      • graphic: (任意) 合成する画像ファイル。data/image から。folder で変更可。 (デフォルト値: "")
      • color: (任意) 合成する色 (0xRRGGBB形式)。graphic 指定時は無視。 (デフォルト値: "")
      • mode: (任意) ブレンドモード (multiply, screen, overlay など)。 (デフォルト値: "multiply")
      • folder: (任意) graphic の読み込みフォルダ。 (デフォルト値: "")
      • opacity: (任意) レイヤの不透明度 (0-255)。 (デフォルト値: "")
      • time: (任意) フェードイン時間 (ミリ秒)。 (デフォルト値: "500")
      • wait: (任意) フェードイン完了を待つか (true or false)。 (デフォルト値: "true")
    • 期待される動作:
      1. クリック待ちグリフを隠します。
      2. <div class='layer_blend_mode blendlayer'> 要素 (blend_layer) を生成します。
      3. name があればクラス (layer_blend_ + name) を追加します。
      4. color, opacity, graphic (背景画像), mode (mix-blend-mode) スタイルを設定します。
      5. blend_layer を #tyrano_base に追加します。
      6. graphic が指定されている場合は画像をプリロードします。
      7. プリロード完了後 (または graphic がない場合)、blend_layer.fadeIn(time, callback) を実行します。
      8. フェードイン完了後、wait=true なら nextOrder を呼び出します。
      9. wait=false の場合は、プリロード完了後 (または即時) に nextOrder を呼び出します。
    • サンプルコード: tyranoscript [layermode graphic=fg0.png time=1500 mode=overlay]

    10.9. [layermode_movie]

    • グループ: 演出・効果・動画
    • タイトル: レイヤーモード(動画)
    • 説明:
      • ゲーム画面全体に動画を重ね、指定したブレンドモードで合成します。
      • IEなど一部ブラウザ非対応。
    • パラメータ:
      • name: (任意) 合成レイヤの名前。 (デフォルト値: "")
      • video: (必須) 合成する動画ファイル。data/video から。
      • volume: (任意) 動画の音量 (0-100)。 (デフォルト値: "")
      • mute: (任意) ミュートするか (true or false)。 (デフォルト値: "false")
      • loop: (任意) ループ再生するか (true or false)。 (デフォルト値: "true")
      • speed: (任意) 再生速度 (例: 1.0, 0.5, 2.0)。 (デフォルト値: "")
      • mode: (任意) ブレンドモード。 (デフォルト値: "multiply")
      • opacity: (任意) レイヤの不透明度 (0-255)。 (デフォルト値: "")
      • time: (任意) フェードイン時間 (ミリ秒)。 (デフォルト値: "500")
      • left, top, width, height: (任意) レイヤの位置とサイズ (px)。 (デフォルト値: "")
      • fit: (任意) 画面全体に引き伸ばすか (true or false)。height 指定がない場合に影響。 (デフォルト値: "true")
      • wait: (任意) 再生完了を待つか (true or false)。loop=true の場合は無視され、完了を待ちません。 (デフォルト値: "false")
    • 期待される動作:
      1. クリック待ちグリフを隠します。
      2. <video class='layer_blend_mode blendlayer blendvideo'> 要素 (blend_layer) を生成します。
      3. name があれば data-video-name 属性とクラス (layer_blend_ + name) を設定します。
      4. src, volume, defaultPlaybackRate, autoplay, autobuffer, playsinline, muted, loop 属性を設定します。
      5. CSS スタイル (backgroundColor, position, top, left, width, height, minHeight, minWidth, backgroundSize, opacity, mix-blend-mode) を設定します。fit に応じて height のデフォルト値を調整します。
      6. ended イベントリスナを設定します。
        • loop=false なら動画要素を削除します。
        • wait=true なら nextOrder を呼び出します。
      7. pm をJSON文字列化して data-video-pm 属性に格納します (ロード復元用)。
      8. 要素を非表示 (hide()) にして #tyrano_base に追加します。
      9. video.load() と video.play() を呼び出して再生を開始します。
      10. blend_layer.fadeIn(time, callback) でフェードインさせます。
      11. フェードイン完了後、wait=true かつ loop=true の場合に nextOrder を呼び出します。
      12. wait=false の場合は、フェードイン開始と同時に nextOrder を呼び出します。
    • サンプルコード: tyranoscript [layermode_movie video=test.webm time=1500 wait=true]

    10.10. [free_layermode]

    • グループ: 演出・効果・動画
    • タイトル: 合成レイヤの消去
    • 説明:
      • [layermode] または [layermode_movie] で作成した合成レイヤを削除します。
    • パラメータ:
      • name: (任意) 削除するレイヤの name。省略時はすべての合成レイヤ (.blendlayer)。 (デフォルト値: "")
      • time: (任意) フェードアウト時間 (ミリ秒)。 (デフォルト値: "500")
      • wait: (任意) フェードアウト完了を待つか (true or false)。 (デフォルト値: "true")
    • 期待される動作:
      1. クリック待ちグリフを隠します。
      2. 対象となる合成レイヤ要素 (blend_layer) を取得します (name 指定があれば .layer_blend_ + name、なければ .blendlayer)。
      3. 対象要素が存在しない場合は nextOrder を呼び出して終了します。
      4. 各対象要素に対して .fadeOut(time, callback) を実行します。
      5. フェードアウト完了後、要素を削除 (remove()) し、すべての対象要素のアニメーションが完了したら、wait=true なら nextOrder を呼び出します。
      6. wait=false の場合は、フェードアウト開始と同時に nextOrder を呼び出します。
    • サンプルコード: tyranoscript [free_layermode name="test"]

    10.11. [mask]

    • グループ: 演出・効果・動画

    • タイトル: スクリーンマスク表示

    • 説明:

      • 画面全体を特定の色や画像で覆い隠すマスクを表示します。表示時にアニメーション効果を適用できます。
      • 主に、場面転換などで裏で画面構成を変更する間の目隠しとして使用します。
    • パラメータ:

      • time: (任意) マスク表示にかかる時間 (ミリ秒)。 (デフォルト値: 1000)
      • effect: (任意) 表示時のアニメーション効果 (fadeIn, fadeInDownBig など)。 (デフォルト値: "fadeIn")
      • color: (任意) マスクの色 (0xRRGGBB形式)。"none" で背景色なし。 (デフォルト値: "0x000000")
      • graphic: (任意) マスクとして表示する画像ファイル。data/image から。 (デフォルト値: "")
      • folder: (任意) graphic の読み込みフォルダ。 (デフォルト値: "")
    • 期待される動作:

      1. weaklyStop() で一時停止します。
      2. <div class='layer layer_mask'> 要素 (j_div) を生成します。
      3. animation-duration を pm.time に設定します。
      4. width, height をゲーム画面サイズに設定します。
      5. color が "none" でなければ background-color を設定します。
      6. graphic が指定されていれば background-image を設定します。
      7. graphic が指定されていない場合、マスクの外に線が見えるのを防ぐため transform: scale(1.02) を設定します。
      8. j_div を .tyrano_base に追加します。
      9. j_div に animated クラスと pm.effect で指定された効果クラスを追加します。
      10. animationend イベントリスナを設定します。
        • アニメーション完了後:
          • graphic が指定されていない場合、ゲーム画面本体 (#root_layer_game) を非表示 (opacity: 0) にします。
          • nextOrder を呼び出します。
    • サンプルコード:

      ;暗転開始
      [mask effect="fadeInDownBig" time=2000]
      
      ;裏で画面操作
      [bg storage="umi.jpg" time=500]
      
      ;暗転解除
      [mask_off]

    10.12. [mask_off]

    • グループ: 演出・効果・動画
    • タイトル: スクリーンマスク消去
    • 説明:
      • [mask] タグで表示したスクリーンマスクを、アニメーション効果とともに消去します。
    • パラメータ:
      • time: (任意) マスク消去にかかる時間 (ミリ秒)。 (デフォルト値: 1000)
      • effect: (任意) 消去時のアニメーション効果 (fadeOut, fadeOutDownBig など)。 (デフォルト値: "fadeOut")
    • 期待される動作:
      1. マスク要素 (.layer_mask) (j_div) を取得します。存在しない場合は cancelWeakStop() と nextOrder() を呼んで終了します。
      2. ゲーム画面本体 (#root_layer_game) を表示状態 (opacity: 1) に戻します。
      3. j_div から既存のアニメーションクラスを削除し、animation-duration を pm.time に設定します。
      4. j_div に animated クラスと pm.effect で指定された効果クラスを追加します。
      5. animationend イベントリスナを設定します。
        • アニメーション完了後:
          • j_div を削除します (remove())。
          • cancelWeakStop() を呼び出します。
          • nextOrder を呼び出します。
    • サンプルコード: (省略。[mask] のサンプル参照)

    11. アニメーション関連タグ

    11.1. [anim]

    • グループ: アニメーション

    • タイトル: アニメーション

    • 説明:

      • 画面上の要素(画像、テキスト、レイヤなど)の位置、サイズ、不透明度、色などをアニメーションさせます。
      • name または layer で対象を指定します。
      • left, top には相対指定 (+=, =) が可能です。
      • アニメーションの完了は待ちません。待つ場合は [wa] タグを使用します。
    • パラメータ:

      • name: (任意) アニメーション対象要素の name。
      • layer: (任意) アニメーション対象レイヤ。name 指定時は無視。
      • left, top, width, height, opacity, color: (任意) アニメーション後の目標値。opacity は 0-255。
      • time: (任意) アニメーション時間 (ミリ秒)。 (デフォルト値: "2000")
      • effect: (任意) イージング効果。jQuery UI Easing または jQuery Easing Plugin で定義されている名前。 (デフォルト値: "")
    • 期待される動作:

      1. left, top, width, height, opacity, color パラメータからアニメーションさせるスタイル (anim_style) を構築します。
      2. name または layer パラメータに基づいてアニメーション対象のjQueryオブジェクト (j_targets) を決定します。
      3. 対象が存在する場合、各対象要素 (j_target) に対して:
        • アニメーションスタックをプッシュします (kag.pushAnimStack)。
        • .stop(true, true).animate(anim_style, time, effect, callback) を実行します。
        • アニメーション中に要素が削除された場合の対策として、remove.anim イベントを設定し、その中で popAnimStack を呼ぶようにします。
        • tyrano-anim クラスを追加します (アニメーション中を示すマーカー)。
        • アニメーション完了時のコールバックで、remove.anim イベントを解除し、tyrano-anim クラスを削除し、アニメーションスタックをポップします (kag.popAnimStack)。
      4. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      [ptext layer=1 page=fore text="文字列" size=30 x=0 y=0 color=red vertical=true]
      
      [image layer=0 left=100 top=100  storage = yuko1.png page=fore visible=true name=yuko,chara ]
      [image layer=1 left=300 top=100 storage = haruko1.png page=fore visible=true name=haruko ]
      
      ;name属性を指定してアニメーション
      [anim name=haruko left="+=100" time=10000 effect=easeInCirc opacity=0  ]
      
      ;レイヤを指定してアニメーション
      [anim layer=1 left="+=100" effect=easeInCirc opacity=0  ]
      
      ;すべてのアニメーション完了を待ちます
      [wa]
      
      アニメーション終了

    11.2. [wa]

    • グループ: アニメーション
    • タイトル: アニメーション終了待ち
    • 説明:
      • 現在実行中のすべてのアニメーション ([anim] や [kanim] など、内部で pushAnimStack/popAnimStack を使用するもの) が完了するまで待機します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.tmp.num_anim (実行中のアニメーション数) が 0 より大きい場合:
        • kag.stat.is_wait_anim = true を設定します。
        • weaklyStop() を呼び出して一時停止します。アニメーション完了時に popAnimStack が呼ばれ、num_anim が 0 になった時点で nextOrder が実行されます。
      2. kag.tmp.num_anim が 0 以下の場合、即座に nextOrder を呼び出します。
    • サンプルコード: (省略。[anim] のサンプル参照)

    11.3. [stopanim]

    • グループ: アニメーション
    • タイトル: アニメーション強制停止
    • 説明:
      • 指定された name を持つ要素で実行中のアニメーション ([anim] によるもの) を強制的に停止させます。
    • パラメータ:
      • name: (必須) アニメーションを停止する要素の name。
    • 期待される動作:
      1. $("." + pm.name).stop() を呼び出して、対象要素のjQueryアニメーションを停止します。
      2. kag.popAnimStack() を呼び出してアニメーションスタックを1つ減らします (停止したアニメーションに対応)。
      3. 次のタグへ進みます (nextOrder)。

    11.4. [keyframe], [endkeyframe]

    • グループ: アニメーション
    • タイトル: キーフレームアニメーション定義の開始 / キーフレームアニメーション定義の終了
    • 説明:
      • [frame] タグを使って、CSSの @keyframes に相当するカスタムアニメーションを定義します。
      • name 属性でアニメーションに名前を付け、[kanim] タグで呼び出して使用します。
    • パラメータ ([keyframe]):
      • name: (必須) 定義するキーフレームアニメーションの名前。
    • パラメータ ([endkeyframe]): (なし)
    • 期待される動作:
      • [keyframe]:
        1. kag.stat.current_keyframe に pm.name を設定します。これにより、後続の [frame] タグがどのキーフレーム定義に属するかが決まります。
        2. 次のタグへ進みます (nextOrder)。
      • [endkeyframe]:
        1. kag.stat.current_keyframe を空文字列にリセットします。
        2. 次のタグへ進みます (nextOrder)。
    • サンプルコード: (省略。[frame] のサンプル参照)

    11.5. [frame]

    • グループ: アニメーション

    • タイトル: キーフレームアニメーション定義

    • 説明:

      • [keyframe] と [endkeyframe] の間で、アニメーションの中間状態(キーフレーム)を定義します。
      • p パラメータでアニメーション全体のどの時点での状態かをパーセンテージで指定します。
      • x, y, rotate, scale, opacity など、様々なCSSプロパティの値を指定できます。
    • パラメータ:

      • p: (必須) キーフレームの位置 (0% - 100%)。
      • x, y, z: (任意) 移動量 (px)。始まりで絶対位置指定可。
      • rotate, rotateX, rotateY, rotateZ: (任意) 回転量 (deg, rad など)。
      • scale, scaleX, scaleY, scaleZ: (任意) 拡大・縮小率 (数値)。
      • skew, skewX, skewY: (任意) 傾斜 (deg など)。
      • perspective: (任意) 遠近効果 (px など)。
      • opacity: (任意) 不透明度 (0-255)。
      • (任意) その他: CSSプロパティを直接指定可能。
    • 期待される動作:

      1. kag.stat.current_keyframe で指定されているキーフレーム定義を取得または新規作成します (kag.stat.map_keyframe[keyframe_name])。
      2. pm から p を削除し、残りのパラメータを trans (transform関連) と styles (その他CSS) に振り分けます (master_trans で判定)。
      3. キーフレーム定義内の frames[percentage] に {trans: map_trans, styles: map_style} を格納します。
      4. 次のタグへ進みます (nextOrder)。
    • サンプルコード:

      ;----keyframeの定義
      [keyframe name="fuwafuwa"]
      
      [frame p=40%  x="100" ]
      [frame p=100% y="-200" opacity=0 ]
      
      [endkeyframe]

    11.6. [kanim]

    • グループ: アニメーション
    • タイトル: キーフレームアニメーションの実行
    • 説明:
      • [keyframe] タグで定義したキーフレームアニメーションを指定した要素に適用します。
      • アニメーションの継続時間、繰り返し回数、遅延などを指定できます。
    • パラメータ:
      • keyframe: (必須) 実行するキーフレームアニメーションの name。
      • name: (任意) アニメーション対象要素の name。
      • layer: (任意) アニメーション対象レイヤ。name 指定時は無視。
      • time: (任意) アニメーション時間 (ミリ秒)。 (デフォルト値: "")
      • easing: (任意) イージング効果。 (デフォルト値: "")
      • count: (任意) 繰り返し回数。infinite で無限ループ。 (デフォルト値: "")
      • delay: (任意) 開始遅延時間 (ミリ秒)。 (デフォルト値: "")
      • direction: (任意) 再生方向 (normal, reverse, alternate, alternate-reverse)。 (デフォルト値: "")
      • mode: (任意) 終了後の状態 (none, forwards, backwards, both)。 (デフォルト値: "")
    • 期待される動作:
      1. name または layer パラメータに基づいてアニメーション対象のjQueryオブジェクト (j_targets) を決定します。対象が見つからない場合は nextOrder を呼び出して終了します。
      2. keyframe パラメータで指定されたキーフレーム定義 (anim) を kag.stat.map_keyframe から取得します。存在しない場合はエラーを出して nextOrder を呼び出して終了します。
      3. アニメーションオプション (anim.config) を pm から構築します (duration, delay はミリ秒に変換)。
      4. 無限ループ (count="infinite") でない場合は、アニメーションスタック (should_push_anim_stack) を有効にします。
      5. 各対象要素 (j_target) について:
        • アニメーション定義 (this_anim) をディープコピーします。
        • 要素が左右反転 (reflect クラスを持つ) している場合、キーフレーム内の scaleX の値を反転させます。
        • アニメーション完了時のコールバック (this_anim.complete) を設定し、その中でアニメーションスタックをポップ (popAnimStack) するようにします (スタックが有効な場合)。
        • アニメーションスタックが有効な場合はプッシュ (pushAnimStack) します。
        • 無限ループアニメーションの場合、ロード時に復元するための情報を data-restore 属性に設定します。
        • 要素削除時にアニメーションを強制完了させるための remove イベントリスナを設定します。
        • j_target.a3d(this_anim) を呼び出してアニメーションを開始します。
      6. 次のタグへ進みます (nextOrder)。
    • サンプルコード: (省略。[keyframe] のサンプル参照)

    11.7. [stop_kanim]

    • グループ: アニメーション
    • タイトル: キーフレームアニメーションの停止
    • 説明:
      • [kanim] タグで実行中のキーフレームアニメーションを停止します。
    • パラメータ:
      • name: (任意) アニメーションを停止する要素の name。
      • layer: (任意) アニメーションを停止するレイヤ。name 指定時は無視。
    • 期待される動作:
      1. name または layer パラメータに基づいて対象のjQueryオブジェクト (j_targets) を決定します。対象が見つからない場合は nextOrder を呼び出して終了します。
      2. 各対象要素 (j_target) について:
        • アニメーションスタックが存在すればポップ (popAnimStack) します。
        • CSSのアニメーション関連プロパティ (animation-*, transform) を空文字列に設定してアニメーションを解除します。
        • data-restore 属性から kanim の情報を削除します。
      3. 次のタグへ進みます (nextOrder)。

    11.8. [xanim]

    • グループ: アニメーション

    • タイトル: 汎用アニメーションの実行

    • 説明: (V515以降)

      • [anim] と [kanim] の機能を統合した汎用的なアニメーションタグです。
      • キーフレームアニメーション (keyframe 指定) と、CSSプロパティ直接指定のアニメーションを同時に、または個別に行えます。
      • SVGパスに沿ったアニメーション (svg 指定) も可能です。
    • パラメータ:

      • name, layer: (任意) アニメーション対象。
      • keyframe: (任意) 適用するキーフレームアニメーション名。
      • time, easing, count, delay, direction, mode: (任意) アニメーション共通オプション。
      • svg: (任意) アニメーションパスとして使用するSVGファイル (data/image から)。
      • svg_x, svg_y, svg_rotate: (任意) SVGパスをどの座標軸/回転に適用するか (true or false)。
      • wait: (任意) アニメーション完了を待つか (true or false)。 (デフォルト値: "false")
      • next: (任意) false を指定すると nextOrder を呼び出しません。 (デフォルト値: "true")
      • (任意) その他: CSSプロパティを直接指定可能 (x, y, opacity など)。
    • 期待される動作:

      1. svg パラメータが指定されている場合:
        • SVGファイルをロードまたはキャッシュから取得します (j_svg)。
        • _start(pm, j_svg) を呼び出します。
      2. svg パラメータが指定されていない場合、_start(pm) を呼び出します。
      3. _start 内部:
        • アニメーション対象 (j_targets) を取得します。なければ next() を呼んで終了。
        • アニメーションオプション (duration, delay, direction, loop, easing など) を設定します。
        • keyframe が指定されていれば、キーフレーム定義 (keyframes) を取得・構築します。
        • pm 内のCSS直接指定パラメータ (css_in_pm) を抽出します。
        • 各対象要素 (j_this) について:
          • 無限ループでない場合、アニメーションスタックをプッシュ (pushAnimStack) します。
          • anime.js のオプション (anime_opt) を構築します (targets, duration, easing, keyframes, CSSプロパティなど)。
          • SVGパスアニメーションの場合、translateX, translateY, rotateZ に anime.path() を設定します。
          • アニメーション完了時のコールバック (complete) を設定し、その中でスタックをポップ (popAnimStack) し、必要なら next() を呼び出すようにします。
          • 無限ループの場合、ロード復元用の情報を data-restore 属性に設定します。
          • 要素削除時にアニメーションを強制完了させる remove イベントリスナを設定します。
          • anime(anime_opt) を呼び出してアニメーションを開始します。
        • wait=false なら next() を呼び出します。
    • サンプルコード:

      ;キーフレームアニメーションを無限ループで適用
      [keyframe name="yoko"]
      [frame p="0%" x="0"]
      [frame p="100%" x="100"]
      [endkeyframe]
      [xanim name="akane" keyframe="yoko" count="infinite" time="1000" direction="alternate" easing="linear"]
      
      ;2秒かけて500px右に移動 デフォルトではアニメーションの完了は待たずに次に進むよ
      [xanim name="akane" x="500" time="2000"]

    11.9. [stop_xanim]

    • グループ: アニメーション
    • タイトル: [xanim]の停止
    • 説明: (V515以降)
      • [xanim] タグで実行中のアニメーションを停止します。
    • パラメータ:
      • name: (任意) アニメーションを停止する要素の name。
      • layer: (任意) アニメーションを停止するレイヤ。name 指定時は無視。
      • complete: (任意) true を指定すると、アニメーションの最終状態にジャンプしてから停止します。 (デフォルト値: "false")
    • 期待される動作:
      1. name または layer パラメータに基づいて対象のjQueryオブジェクト (j_targets) を決定します。対象が見つからない場合は nextOrder を呼び出して終了します。
      2. 各対象要素 (j_this) について:
        • その要素に関連付けられた anime.js のインスタンス (anime_state) を this.anime_state_set (内部プロパティ) から取得します。
        • anime_state が存在し、完了していなければ:
          • pm.complete="true" なら anime_state.seek(anime_state.duration) で最終状態に移動します。
          • anime_state.pause() で一時停止し、anime_state.complete() でアニメーションを完了状態にします (これにより complete コールバックが呼ばれ、スタックがポップされるはずです)。
      3. 次のタグへ進みます (nextOrder)。

    12. AR関連タグ

    12.1. [bgcamera]

    • グループ: AR関連

    • タイトル: ストリームカメラ背景

    • 説明:

      • デバイスのカメラを起動し、その映像をゲームの背景として表示します。
      • https:// でアクセス可能なサーバーが必要です。
      • QRコード読み取り機能も持ち、特定の場所にジャンプさせることができます ([s] タグで停止中のみ有効)。
    • パラメータ:

      • wait: (任意) カメラ表示の完了を待つか (true or false)。 (デフォルト値: "true")
      • time: (任意) カメラ映像表示のフェードイン時間 (ミリ秒)。 (デフォルト値: 1000)
      • fit: (任意) 比率を保持するか (true=崩す, false=保持)。 (デフォルト値: "true")
      • left, top, width, height: (任意) カメラ表示領域の位置とサイズ (px)。 (デフォルト値: "")
      • mode: (任意) 使用するカメラ (front or back)。省略時はデフォルトカメラ。 (デフォルト値: "")
      • qrcode: (任意) QRコードの反応モード (jump, web, define, all, off)。 (デフォルト値: "off")
      • debug: (任意) QRコード読み取り時にURLをアラート表示するか (true or false)。 (デフォルト値: "false")
      • audio: (任意) 音声入力も反映させるか (true or false)。 (デフォルト値: "false")
      • name: (任意) 生成される <video> 要素に name を設定。
    • 期待される動作:

      1. QRコードモード (kag.stat.qr.mode) を pm.qrcode で設定します。
      2. <video id="bgcamera"> 要素 (video) を生成し、スタイル (backgroundColor, position, top, left, width, height, playsinline, muted など) を設定します。fit パラメータに応じてサイズを調整します。
      3. name があれば設定します。
      4. #tyrano_base に <video> 要素を追加します。
      5. navigator.mediaDevices.getUserMedia(opt) を呼び出してカメラストリームを取得します。opt には video (カメラ向き指定を含む), audio の設定が含まれます。
      6. ストリーム取得成功時 (media.then(...)):
        • video.srcObject にストリームを設定します。
      7. video 要素の canplay イベントリスナを設定します。
        • canplay 発火時:
          • <video> 要素をフェードインさせます (j_video.fadeIn)。
          • 完了後、kag.tmp.camera_stream = true を設定します。
          • wait=true なら nextOrder を呼び出します。
          • checkPicture(video, pm) を呼び出してQRコードのスキャンを開始します。
      8. wait=false なら、ストリーム取得処理と並行して nextOrder を呼び出します。
      9. checkPicture 内部 (再帰呼び出し):
        • camera_stream が false (停止命令) なら終了します。
        • QRコードモードが off または [s] で停止中でない場合は、1秒後に再帰呼び出しします。
        • <canvas> を使用して現在のビデオフレームを縮小コピーします。
        • jsQR ライブラリでQRコードを解析します。
        • QRコードが見つかった場合 (code):
          • debug=true ならURLをアラート表示します。
          • URLの種類 (http, tyrano:, [jump) と qrcode モードに応じて処理を分岐します。
            • web かつ all/web/define: [qr_define] があればジャンプ、なければ location.href でページ遷移 (defineモードを除く)。
            • tyrano: かつ all/jump: URLから storage, target を抽出し、QRモードを off にして [jump] を実行。
            • [jump かつ all/jump: タグ文字列から pm を生成し、QRモードを off にして [jump] を実行。
        • 300ミリ秒後に再帰呼び出しします。
    • サンプルコード:

      ;背景にカメラの入力を表示
      [bgcamera time=2000]
      
      ;背景を通常に戻す
      [stop_bgcamera]
      
      ;座標を指定してカメラの入力を表示
      [bgcamera width=300 height=200 left=100 top=100]
      
      ;QRコードに反応させる場合。背面カメラを指定
      [bgcamera mode="back" fit=true qrcode="all"]

    12.2. [qr_config]

    • グループ: AR関連
    • タイトル: QRコードの動作設定
    • 説明:
      • [bgcamera] で有効になっているQRコード読み取り機能の動作モードを変更します。
    • パラメータ:
      • qrcode: (任意) QRコードを読み込んだときの動作を設定します。指定できる値は以下の通りです。 (デフォルト値: "")
        • jump: ゲーム内移動 (tyrano: スキームまたは [jump ...] 形式) のQRコードのみ反応します。
        • web: 他サイトへのリンク (http/https) のQRコードのみ反応します。
        • define: [qr_define] タグで定義されたQRコードのみ反応します。
        • all: すべての形式のQRコードに反応します。
        • off: QRコードに反応しなくなります。
    • 期待される動作:
      1. pm.qrcode が指定されている場合、kag.stat.qr.mode をその値で更新します。
      2. 次のタグへ進みます (nextOrder)。
    • サンプルコード:
    ;QRコードでティラノのジャンプのみ有効にする
    [qr_config qrcode="jump"]

    12.3. [stop_bgcamera]

    • グループ: AR関連
    • タイトル: カメラストリームの停止
    • 説明:
      • [bgcamera] で表示されているカメラ映像を停止し、画面から削除します。
    • パラメータ:
      • time: (任意) フェードアウト時間 (ミリ秒)。 (デフォルト値: "1000")
      • wait: (任意) フェードアウトの完了を待つか (true or false)。 (デフォルト値: "true")
    • 期待される動作:
      1. kag.tmp.camera_stream を false に設定します (QRコード読み取りループを停止させるため)。
      2. .tyrano_base 内の #bgcamera 要素 (<video>) を取得します (j_video)。
      3. 要素が存在しない場合は nextOrder を呼び出して終了します。
      4. j_video.fadeOut(pm.time, callback) を実行します。
      5. フェードアウト完了後:
        • ビデオストリームのビデオトラック (getVideoTracks()) とオーディオトラック (getAudioTracks()) を停止 (track.stop()) します。
        • ビデオ要素をDOMから削除 (remove()) します。
        • pm.wait が "true" なら nextOrder を呼び出します。
      6. pm.wait が "false" の場合は、フェードアウト開始と同時に nextOrder を呼び出します。
      7. kag.stat.current_bgcamera を空文字列にリセットします。
    • サンプルコード: tyranoscript [stop_bgcamera time=1000]

    12.4. [qr_define]

    • グループ: AR関連
    • タイトル: QRコードの置き換え
    • 説明:
      • 特定のURLが埋め込まれたQRコードを読み取った際に、指定したシナリオ・ラベルにジャンプするように動作を上書き(定義)します。
      • [bgcamera] または [qr_config] で qrcode モードが define または all に設定されている場合に有効です。
    • パラメータ:
      • url: (必須) 反応させたいQRコードのURL。
      • storage: (任意) ジャンプ先のシナリオファイル名。clear="true" でない場合は必須に近い。 (デフォルト値: "")
      • target: (任意) ジャンプ先のラベル名。 (デフォルト値: "")
      • clear: (任意) true を指定すると、指定した url に対する定義を削除します。 (デフォルト値: "false")
    • 期待される動作:
      1. pm.clear が "true" の場合、kag.stat.qr.define[pm.url] を削除 (delete) します。
      2. pm.clear が "false" の場合、kag.stat.qr.define[pm.url] にパラメータオブジェクト (pm) 全体を格納します。
      3. 次のタグへ進みます (nextOrder)。
    • サンプルコード: tyranoscript [qr_define url="https://tyrano.jp" storage="scene1.ks" target="test" ]

    13. カメラ操作関連タグ ([camera], [reset_camera], [wait_camera])

    13.1. [camera]

    • グループ: カメラ操作

    • タイトル: カメラを移動する

    • 説明:

      • ゲーム画面全体または指定したレイヤに対して、ズーム、パン(移動)、回転といったカメラワーク演出を適用します。
      • Config.tjs の useCamera を true にする必要があります (V5より前のバージョンでは必須でしたが、以降は不要かもしれません。ただし有効化すると中央揃えが無効になる点は同様)。
      • 座標系の中心は画面中央 (x=0, y=0) です。
    • パラメータ:

      • time: (任意) アニメーション時間 (ミリ秒)。 (デフォルト値: 1000)
      • x, y: (任意) 移動先のXY座標 (px)。中心が0。 (デフォルト値: "")
      • zoom: (任意) 拡大率 (数値)。2で2倍。 (デフォルト値: "")
      • rotate: (任意) 回転角度 (度)。 (デフォルト値: "")
      • from_x, from_y, from_zoom, from_rotate: (任意) アニメーション開始時の状態を指定できます。 (デフォルト値: "")
      • wait: (任意) アニメーション完了を待つか (true or false)。 (デフォルト値: "true")
      • layer: (任意) 効果を適用するレイヤ名 (base, 0以上の整数、または layer_camera)。layer_camera (デフォルト) は全レイヤ対象。
      • ease_type: (任意) イージング効果 (linear, ease, ease-in, ease-out, ease-in-out)。 (デフォルト値: "ease")
    • 期待される動作:

      1. pm.time が 10 未満なら 10 に補正します。
      2. 対象レイヤ (pm.layer) の現在のカメラ状態 (kag.stat.current_camera[pm.layer]) を取得または初期化します。
      3. アニメーション終了後のカメラ状態 (to_camera) を、現在の状態をベースに pm.x, pm.y, pm.zoom, pm.rotate で更新して決定します。X座標は反転して px を付け、回転には deg を付けます。
      4. from_* パラメータが指定されていれば、現在のカメラ状態を開始時の状態として設定します。
      5. kag.stat.is_move_camera = true を設定します。
      6. jquery.a3d.js ライブラリを使用してアニメーション定義 (a3d_define) を作成します。
        • frames: 開始状態 (0%) と終了状態 (100%) の trans (transform) プロパティを設定します。
        • config: duration, easing を設定します。
        • complete: アニメーション完了時のコールバック。
          • wait=true の場合、初回のみ nextOrder を呼び出します。
          • wait=false で、かつ [wait_camera] で待機中 (kag.stat.is_wait_camera == true) なら、フラグを解除して nextOrder を呼び出します。
          • kag.stat.is_move_camera = false を設定します。
      7. 現在のカメラ状態 (kag.stat.current_camera[pm.layer]) を to_camera で更新します。
      8. wait=false なら nextOrder を呼び出します。
      9. 対象要素 (.layer_camera または .${pm.layer}_fore) に .a3d(a3d_define) を適用してアニメーションを開始します。
      10. kag.stat.current_camera_layer を更新します。
    • サンプルコード:

      [camera zoom=2 x=180 y=100 time=1000]
      [camera x=-180 y=100 time=2000]
      [camera zoom=2 from_zoom=3 x=180 y=100 time=1000]
      
      ;カメラの位置を元に戻す
      [reset_camera]

    13.2. [reset_camera]

    • グループ: カメラ操作
    • タイトル: カメラをリセットする
    • 説明:
      • [camera] タグで変更したカメラの位置、ズーム、回転を初期状態(移動なし、ズーム1倍、回転0度)に戻します。
      • カメラ演出後は、予期せぬ不具合を防ぐためにこのタグでリセットすることが推奨されます。
    • パラメータ:
      • time: (任意) アニメーション時間 (ミリ秒)。 (デフォルト値: 1000)
      • wait: (任意) アニメーション完了を待つか (true or false)。 (デフォルト値: "true")
      • layer: (任意) リセット対象のレイヤ名。省略時は全レイヤ対象 (layer_camera 含む)。 (デフォルト値: "layer_camera")
      • ease_type: (任意) イージング効果。 (デフォルト値: "ease")
    • 期待される動作:
      1. pm.time が 10 未満なら 10 に補正します。
      2. アニメーション終了後のカメラ状態 (to_camera) を初期値 (x: "0px", y: "0px", scale: "1", rotate: "0deg") に設定します。
      3. kag.stat.is_move_camera = true を設定します。
      4. jquery.a3d.js ライブラリを使用してアニメーション定義 (a3d_define) を作成します。
        • frames: 現在の状態 (kag.stat.current_camera[pm.layer]) から初期状態 (to_camera) へ変化させます。
        • config: duration, easing を設定します。
        • complete: アニメーション完了時のコールバック。
          • 対象要素からアニメーション関連のCSSプロパティと transform スタイルを削除します。
          • wait=true の場合、初回のみ nextOrder を呼び出します。
          • wait=false で、かつ [wait_camera] で待機中なら、フラグを解除して nextOrder を呼び出します。
          • kag.stat.is_move_camera = false を設定します。
      5. pm.layer が "layer_camera" の場合、kag.stat.current_camera 全体をリセット ({}) します。そうでなければ、指定レイヤのカメラ情報 (kag.stat.current_camera[pm.layer]) を削除 (delete) します。
      6. wait=false なら nextOrder を呼び出します。
      7. 対象要素に .a3d(a3d_define) を適用してアニメーションを開始します。
      8. kag.stat.current_camera_layer を空文字列にリセットします。
    • サンプルコード: (省略。[camera] のサンプル参照)

    13.3. [wait_camera]

    • グループ: カメラ操作
    • タイトル: カメラの演出を待つ
    • 説明:
      • 現在実行中のカメラアニメーション ([camera] または [reset_camera] で wait=false を指定したもの) が完了するまで待機します。
    • パラメータ: (なし)
    • 期待される動作:
      1. kag.stat.is_move_camera が true (カメラアニメーション実行中) の場合:
        • kag.stat.is_wait_camera = true を設定します。これにより、アニメーション完了時のコールバックで nextOrder が呼ばれるようになります。
      2. kag.stat.is_move_camera が false (カメラアニメーション中でない) の場合、即座に nextOrder を呼び出します。
    • サンプルコード:
    [camera zoom=2 x=180 y=100 time=10000 wait=false] 
    カメラ演出中[p] 
    ここでもカメラ演出中[p] 
    カメラの演出を待ちます
    
    [wait_camera] 
    カメラの演出が終わったので進行[p]

    14. VChat関連タグ

    14.1. [vchat_in]

    • グループ: (内部的/VChat)
    • タイトル: (VChat用) バルーンの画面外配置
    • 説明: (一般的なタグとしては利用不可)
      • VChat (Visual Chat) 機能で使用される内部的なタグです。
      • 新しい発言のための空のチャットバルーンを画面外の見えない位置に準備します。
    • パラメータ: (なし。ただし内部的に id, name を持つ可能性がある)
    • 期待される動作:
      1. weaklyStop() で一時停止します。
      2. 現在のメッセージレイヤ (current_layer) を取得し、非表示 (display: none) にし、画面外 (left: -100000) へ移動させます。
      3. VChatのベース要素 (#vchat_base) を取得します。
      4. 現在アクティブなバルーン (.current_vchat) から current_vchat クラスを削除し、talked_vchat クラスを追加します。
      5. 新しいバルーンのHTML文字列を生成します (<div class="vchat current_vchat">...</div>)。
      6. 生成したHTMLからjQueryオブジェクト (j_vchat) を作成し、初期状態では非表示 (hide()) にします。
      7. バルーン内のテキスト要素 (j_vchat_text) を取得し、デフォルトのフォントスタイルを設定します。
      8. キャラクター名要素 (vchat_chara_name) のスタイルを設定します (現在はコメントアウトされています)。
      9. 新しいバルーン (j_vchat) をVChatベース要素の先頭に追加 (prepend()) します。
      10. VChatベース要素のスクロール位置を一番上 (scrollTop(0)) にします。
      11. VChatログカウンタ (_vchat_log_count) をインクリメントします。
      12. ログカウンタが最大値 (kag.stat.vchat.max_log_count) を超えていたら、一番古いバルーン (.vchat:eq(-1)) を削除します。
      13. cancelWeakStop() で停止を解除します。
      14. return false します (これは通常、タグ実行後に nextOrder を呼ばないことを意味しますが、vchat_in は内部的に呼ばれるため、呼び出し元で nextOrder が制御されると思われます)。

    14.2. [vchat_config]

    • グループ: (VChat)
    • タイトル: (VChat用) 設定変更
    • 説明: VChat機能に関する設定を変更します。
    • パラメータ:
      • chara_name_color: (任意) キャラクター名表示欄の背景色 (0xRRGGBB形式)。 (デフォルト値: "")
    • 期待される動作:
      1. pm.chara_name_color が指定されていれば、kag.stat.vchat.chara_name_color を更新します。
      2. 次のタグへ進みます (nextOrder)。

    14.3. [vchat_chara]

    • グループ: (VChat)
    • タイトル: (VChat用) キャラクター設定
    • 説明: VChatで使用するキャラクターごとの設定を行います。
    • パラメータ:
      • name: (必須) 設定対象のキャラクター名。
      • color: (任意) このキャラクターの発言時の名前表示欄の背景色 (0xRRGGBB形式)。 (デフォルト値: "")
    • 期待される動作:
      1. VChat機能が有効でない (kag.stat.vchat.is_active == false) 場合は、nextOrder を呼び出して終了します。
      2. kag.stat.vchat.charas オブジェクト内に指定された name のエントリがなければ、空のオブジェクトで初期化します。
      3. pm.color が指定されていれば、kag.stat.vchat.charas[pm.name]["color"] を更新します。
      4. 次のタグへ進みます (nextOrder)。

    内部状態

    エンジン内部のstateは、主に以下のオブジェクトによって管理される。

    • kag.stat: ゲームの永続的な状態を保持する。セーブ・ロードの対象となり、ゲームプレイの進行状況、プレイヤーの選択、キャラクターの状態などが含まれる。
    • kag.tmp: 一時的な状態やキャッシュ情報を保持する。セーブ・ロードの対象外であり、現在のタグ実行コンテキスト、アニメーション状態、プリロード情報などが含まれる。ゲームの再起動やロード時にリセットされる。
    • kag.variable: ゲーム変数を管理する。
      • f: ゲーム変数。シナリオ内で自由に定義・変更可能。セーブ・ロード対象。
      • sf: システム変数。ゲーム間で共有される可能性のある設定や状態。セーブ・ロード対象。
      • tf: 一時変数。現在のシナリオファイルやマクロ内でのみ有効な変数。セーブ・ロード対象外。
    • kag.layer: レイヤーの状態(DOM要素、表示/非表示、スタイルなど)を管理する。map_layer_fore, map_layer_back などが含まれる。
    • kag.config: ゲームの基本設定(Config.tjsから読み込まれる)。一部の設定は kag.stat や kag.variable.sf の値によって上書きされる。

    kag.stat

    kag.stat はゲームの永続的な状態を保持する中心的なオブジェクトである。以下に各プロパティの詳細を記述する。

    プロパティ名型説明初期値(推測)関連タグ/処理期待される動作/役割セーブ/ロード
    map_labelObject現在のシナリオファイル内のラベル名とそのタグインデックスのマッピング。{}[label], [jump], [call]ラベルジャンプの宛先特定に使用。[label] タグ通過時に登録される。○
    map_macroObject定義されたマクロ名とその開始位置(シナリオファイル、インデックス)のマッピング。{}[macro], [erasemacro], マクロ呼び出しマクロ呼び出し時に、定義された場所へジャンプするために使用。[macro]で登録、[erasemacro]で削除。○
    verticalString"true" または "false"。縦書きモードが有効か。"false"[position] (vertical属性)テキスト表示方向を制御する。○
    fObjectゲーム変数 (f.*) を格納するオブジェクト。{}[eval], [clearvar], [commit], [ptext] (name属性)シナリオ進行中に値を保持・変更するための汎用変数領域。○
    mpObjectマクロ呼び出し時に渡されたパラメータ (% 記法で使用)。{}マクロ呼び出し, [endmacro]マクロ内でパラメータを参照するために使用。マクロ呼び出し時に設定され、[endmacro]でスタックに応じて復元される。○
    current_layerString現在操作対象のメッセージレイヤ名 (message0, message1 など)。"message0"[current], [ct][text] や [font] などがどのメッセージレイヤに作用するかを決定する。○
    current_pageString現在操作対象のページ (fore または back)。"fore"[current], [ct]レイヤー操作が表ページか裏ページかを決定する。○
    is_stopBooleanアニメーションやトランジションなどの処理中に true になる弱い停止フラグ。false[wait], [trans], [anim] など (開始時に true, 完了時に false)true の間、プレイヤーのクリックによる進行が無効になる。nextOrder は実行される。×
    is_waitBoolean[wait] タグ実行中に true になる停止フラグ。false[wait], [wait_cancel]true の間、ゲーム進行が完全に停止する。タイムアウトまたは [wait_cancel] で解除。○
    is_transBoolean[trans] タグ実行中に true になる停止フラグ。false[trans] (開始時に true), completeTrans (完了時に false)true の間、トランジションが完了するのを待つ ([wt]で使用)。×
    is_wait_animBoolean[wa] タグ実行中に true になる停止フラグ。false[wa], popAnimStacktrue の間、すべてのアニメーション完了を待つ。kag.tmp.num_anim が 0 になると解除。×
    is_strong_stopBoolean[s] タグ実行中に true になる強い停止フラグ。false[s], [jump], [call], [return] など (ジャンプ/コール系で解除)true の間、クリックや nextOrder を含め、ほぼすべての進行が停止する。選択肢待ちなどで使用。○
    strong_stop_recover_indexNumber[s] タグで停止したときの current_order_index。0[_s][s] タグ実行中にセーブした場合、ロード後にこのインデックスから再開するために使用される([_s] は通常使用されない内部タグ)。○
    is_nowaitBoolean[nowait] 実行中に true になるフラグ。false[nowait], [endnowait]true の間、テキストが一瞬で表示される。○
    current_message_strString現在メッセージウィンドウに表示されているテキスト。"ゲームスタート"[text]バックログやセーブデータのタイトル生成に使用される。○
    current_save_strStringセーブデータのタイトルとして使用されるテキスト。""[text], pushBackLogpushBackLog の第1引数(chara_name)が空でない場合に current_message_str から更新される。○
    current_keyframeString現在定義中のキーフレームアニメーション名。""[keyframe], [endkeyframe][frame] タグがどのキーフレーム定義に属するかを特定するために使用。○
    map_keyframeObject定義されたキーフレームアニメーションの情報。{}[keyframe], [frame], [kanim], [xanim][frame] で定義されたキーフレーム情報を保持し、[kanim], [xanim] で参照される。○
    is_scriptBoolean[iscript] と [endscript] の間は true。false[iscript], [endscript]true の間、テキストは JavaScript コードとして buff_script に蓄積される。タグのエンティティ置換などが無効になる。×
    buff_scriptStringis_script が true の間に蓄積される JavaScript コード。""[text] (in iscript), [endscript][endscript] で評価される。×
    is_htmlBoolean[html] と [endhtml] の間は true。false[html], [endhtml]true の間、テキストは HTML コードとして map_html.buff_html に蓄積される。×
    map_htmlObjectis_html が true の間の状態(buff_html, buff_pm)。{}[html], [endhtml], [text] (in html)[endhtml] で HTML を構築するために使用。×
    cssloadObject[loadcss] で読み込まれた CSS ファイルのパスをキーとするマップ。{}[loadcss]ロード時に同じ CSS を再度読み込むために使用。○
    save_imgString[save_img] で指定されたカスタムセーブサムネイル画像のパス。""[save_img]空文字列の場合、通常の画面キャプチャがサムネイルになる。指定されている場合、その画像がサムネイルになる。○
    stackObjectif, call, macro のネスト状態を管理するスタック。{if:[],call:[],macro:[]}[if], [elsif], [else], [endif], [call], [return], [macro], [endmacro], [clearstack]各タグの実行時に対応するスタックが push/pop される。特に call/macro のスタックはパラメータ(mp)の復元にも関わる。○
    set_text_spanBooleanメッセージ表示中に新しい <span> を作成する必要がある場合に true になる(主に内部用)。false[font], [resetfont], [ruby]true の場合、次のテキスト表示時に強制的に新しい span.current_span が作成される。○
    current_scenarioString現在実行中のシナリオファイル名。"first.ks"loadScenario, [jump], [call]インタープリタがどのシナリオファイルを処理しているかを示す。○
    is_skipBooleanスキップモードが有効か。falsesetSkip, [skipstart], [skipstop]true の間、テキスト瞬間表示、ウェイトやアニメーションの短縮などが行われる。○
    is_autoBooleanオートモードが有効か。falsesetAuto, [autostart], [autostop]true の間、クリック待ち ([l], [p]) が自動的に解除される。○
    current_bgmString現在再生中の BGM ファイル名。""[playbgm], [stopbgm]ロード時に BGM を復元するために使用。○
    current_bgm_volString現在再生中の BGM の volume パラメータの値。""[playbgm], [stopbgm], [bgmopt]ロード時に BGM 音量を復元するために使用。○
    current_bgm_html5String"true" または "false"。現在再生中の BGM の html5 パラメータの値。"false"[playbgm], [stopbgm]ロード時に BGM 再生方法を復元するために使用。○
    current_bgm_base64String現在再生中の BGM が base64 エンコードされている場合のファイル形式 (mp3, ogg など)。されていない場合は ""。""[playbgm] (base64属性)ロード時に base64 音声を復元するために使用。○
    current_bgm_pause_seekString[pausebgm] 実行時に再生位置(秒)が格納される。再生中は ""。""[pausebgm], [resumebgm], [playbgm]ロード時に一時停止状態を復元するために使用。○
    current_seObject再生中のループ SE の情報(キー:buf, 値:pm)。{}[playse], [stopse]ロード時にループ SE を復元するために使用。○
    load_auto_nextBoolean[showsave] などで開いたセーブ画面からロードした場合に true になる。false[showsave], loadGameDataロード完了後に nextOrder を呼ぶかどうかを制御する。×
    current_bgcameraString/Object[bgcamera] で設定されたパラメータ。無効な場合は ""。""[bgcamera], [stop_bgcamera]ロード時にカメラ背景を復元するために使用。○
    enable_keyconfigBooleanキーボード/マウス/ゲームパッド操作が有効か。true[start_keyconfig], [stop_keyconfig]false の間、キーコンフィグで定義されたアクション(defaultを除く)が無効になる。○
    current_bgmovieObject再生中の背景動画の情報 (storage, volume)。{storage:"", volume:""}[bgmovie], [stop_bgmovie]ロード時に背景動画を復元するために使用。○
    current_cameraObject[camera] で操作されたカメラの状態(キー:レイヤ名、値:trans オブジェクト)。{}[camera], [reset_camera]ロード時にカメラ状態を復元するために使用。○
    current_camera_layerString[camera] で最後に操作されたレイヤ名。""[camera], [reset_camera]内部処理用?(セーブ/ロードには影響しない可能性)○
    is_move_cameraBooleanカメラアニメーション([camera], [reset_camera])実行中に true。false[camera], [reset_camera][wait_camera] で参照される。×
    is_wait_cameraBoolean[wait_camera] 実行中に true。false[wait_camera], [camera], [reset_camera]true の間、カメラアニメーションの完了を待つ。アニメーション完了時に解除され nextOrder が呼ばれる。×
    current_lineNumber現在実行中のタグの、シナリオファイル内での行番号(0-based)。0nextOrderエラーメッセージ表示に使用。○
    is_hide_messageBooleanメッセージレイヤが非表示状態か([hidemessage] などで)。false[hidemessage], showMessageLayers, [text]true の間、メッセージレイヤが表示されない。クリックで false になり表示される。[text] 到達時にも false になる。○
    is_click_textBooleanテキスト表示中にクリックされた場合に true。falseclick イベント (in text), [l], [p]true の間、テキストが一瞬で表示される(または ch_speed_in_click の速度で表示される)。[l] や [p] で false にリセットされる。×
    is_adding_textBooleanテキストを1文字ずつ表示している最中は true。false[text] (表示開始時に true, 完了時に false)true の間、nextOrder が抑制される。[skipstart] も無効になる。×
    flag_ref_pageBoolean改ページ([p])やメッセージクリア([cm], [er])が必要な場合に true。false[p], [cm], [er], [ct]true の場合、次のテキスト表示時にメッセージレイヤがクリアされる。○
    ruby_strString次の1文字に適用するルビ文字列。""[ruby][text] タグ内で参照され、<ruby> タグを生成する。使用後にクリアされる。○
    markNumberテキストマーカーの状態(0: なし, 1: 開始, 2: 終了待ち)。0[mark], [endmark], [text][text] タグ内で参照され、<mark> タグを生成する。○
    style_markStringテキストマーカーのスタイル文字列。""[mark][text] タグ内で参照される。○
    ch_speedString現在の文字表示速度(ミリ秒/文字)。空文字列の場合は kag.config.chSpeed が適用される。""[delay], [resetdelay][text] タグ内で参照される。○
    skip_linkString"true" または "false"。選択肢クリック後にスキップモードを継続するか。"true"- (Config.tjs で設定)選択肢 ([link], [button]) のクリックイベントで参照される。○
    log_joinString"true" または "false"。バックログを前の行に連結するか。"false"各タグ定義 (log_join プロパティ), pushBackLogpushBackLog で参照される。多くのタグ通過時に false にリセットされる。○
    log_clearBoolean次のバックログ追加時に強制的に add モードにするか。false[p], [cm], [er], [ct], pushBackLogpushBackLog で参照される。○
    f_chara_ptextString"true" または "false"。[chara_ptext] 直後かどうか(主にバックログ用)。"false"[chara_ptext]バックログ生成時に参照される。○
    flag_glyphString"true" または "false"。クリック待ちグリフを固定表示するか。"false"[glyph]showNextImg などで参照される。"true" の場合、画面固定位置にグリフが表示される。○
    path_glyphStringクリック待ちグリフの画像ファイル名。"nextpage.gif"[glyph]showNextImg などで参照される。○
    current_cursorString/Object現在のマウスカーソル設定。[cursor] の storage または pm オブジェクト。"auto"[cursor]ロード時にカーソルを復元するために使用。○
    use_close_confirmBoolean終了確認ダイアログが有効か。false[closeconfirm_on], [closeconfirm_off]true の場合、未保存状態でゲームを閉じようとすると確認ダイアログが表示される。○
    fontObject現在のテキストスタイル。{}[font], [resetfont][text] タグ実行時に span のスタイルとして適用される。[resetfont] で default_font の値に戻る。○
    locateObject[locate] で指定された x, y 座標。{x:0, y:0}[locate][button] などの位置指定に使用される。○
    default_fontObjectデフォルトのテキストスタイル。{}[deffont], [resetfont][resetfont] 実行時に kag.stat.font にコピーされる。○
    fukiObjectふきだし表示 ([fuki_start]) に関連する状態。{active:false, def_style:{}, def_style_inner:{}, def_pm:{}, marginr:0, marginb:0, others_style:{}}[fuki_start], [fuki_stop], [fuki_chara], [position]ふきだしの表示/非表示、スタイル、位置などを管理する。○
    sysviewObjectシステム画面(セーブ、ロードなど)の HTML ファイルパス。{}[sysview]kag.html() で参照される。○
    chara_pos_modeString"true" または "false"。キャラクターの自動配置が有効か。"true"[chara_config][chara_show], [chara_hide] などで参照される。○
    chara_effectStringキャラクター自動配置時のアニメーション効果名。"swing"[chara_config]キャラクター自動配置時に使用される。○
    chara_ptextStringキャラクター名表示領域の name 属性値。""[chara_config][chara_ptext] で参照される。○
    chara_timeString[chara_mod] での表情変更クロスフェード時間(ミリ秒)。"600"[chara_config][chara_mod] で参照される。○
    chara_memoryString"true" または "false"。[chara_hide] 時に表情を記憶するか。"false"[chara_config][chara_hide], [chara_show] で参照される。○
    chara_animString"true" または "false"。キャラクター自動配置時にアニメーションするか。"true"[chara_config]キャラクター自動配置時に参照される。○
    pos_change_timeStringキャラクター自動配置時のアニメーション時間(ミリ秒)。"600"[chara_config]キャラクター自動配置時に参照される。○
    chara_last_zoom_nameString[chara_ptext] で最後にズームアニメーションしたキャラ名。""[chara_ptext]ズームアニメーション処理で使用。○
    chara_talk_focusString発言者フォーカスモード (none, brightness, blur)。"none"[chara_config][chara_ptext] 実行時に、非発言者のスタイルを変更するために使用。○
    chara_brightness_valueStringtalk_focus=brightness 時の非発言者の明度(%)。"60"[chara_config]非発言者のスタイル設定時に使用。○
    chara_blur_valueStringtalk_focus=blur 時の非発言者のぼかし強度(px)。"2"[chara_config]非発言者のスタイル設定時に使用。○
    chara_talk_animString発言開始時のアニメーション種別 (none, up, down, zoom)。"none"[chara_config][chara_ptext] 実行時にアニメーションを適用するために使用。○
    chara_talk_anim_timeNumber発言開始時のアニメーション時間(ミリ秒)。230[chara_config][chara_ptext] 実行時に使用。○
    chara_talk_anim_valueNumbertalk_anim=up/down 時の移動量(px)。30[chara_config][chara_ptext] 実行時に使用。○
    chara_talk_anim_zoom_rateNumbertalk_anim=zoom 時の拡大率。1.2[chara_config][chara_ptext] 実行時に使用。○
    apply_filter_strString非発言者に適用する CSS filter 文字列。""[chara_config]非発言者のスタイル設定時に使用。○
    video_stackObject/null[bgmovie] のループ再生中に次の動画が指定された場合に、その pm を保持する。null[bgmovie]背景動画のループ完了後に再生を切り替えるために使用。×
    is_wait_bgmovieBoolean[wait_bgmovie] 実行中に true。false[wait_bgmovie]true の間、背景動画の再生完了を待つ。×
    charasObject[chara_new] で定義されたキャラクター情報。{}[chara_new], [chara_delete], etc.キャラクター表示や操作の基盤となる情報。○
    jcharasObjectキャラクターの日本語名(jname)と内部名(name)のマッピング。{}[chara_new]#日本語名 のような省略記法でのキャラクター指定を可能にする。○
    play_bgmBooleanBGM 再生が有効か。true- (Config.tjs の defaultBgmMode などで制御される可能性)false の場合、[playbgm] などの BGM 操作が無効になる。○
    play_seBooleanSE 再生が有効か。true- (Config.tjs の defaultSeMode などで制御される可能性)false の場合、[playse] などの SE 操作が無効になる。○
    play_speakBooleanテキスト読み上げ機能が有効か。false[speak_on], [speak_off]true の場合、[text] タグ実行時に読み上げが行われる。○
    map_se_volumeObjectSE のスロットごとの個別ボリューム設定 (buf がキー)。{}[seopt][playse] 時の音量計算に使用。○
    map_bgm_volumeObjectBGM のスロットごとの個別ボリューム設定 (buf がキー)。{}[bgmopt][playbgm] 時の音量計算に使用。○
    map_voObjectボイス関連設定 ([voconfig])。vobuf (ボイス用SEバッファ), vochara (キャラ別ボイス設定)。{vobuf:{}, vochara:{}}[voconfig][chara_ptext] 実行時のボイス自動再生に使用。○
    vostartBooleanボイス自動再生が有効か ([vostart])。false[vostart], [vostop]true の間、[chara_ptext] 実行時に対応するボイスが再生される。○
    log_writeBooleanバックログへの記録が有効か。true[nolog], [endnolog]false の間、pushBackLog が抑制される。○
    buff_label_nameString最後に通過したラベル名(既読管理用)。""[label]次の [label] 通過時に、この値に対応する sf.record がインクリメントされる。○
    already_readBoolean現在の位置が既読済みか。false[label]既読管理 (configRecordLabel) が有効な場合、[label] 通過時に判定・設定される。未読スキップ判定や既読テキスト色変更に使用。○
    visible_menu_buttonBooleanメニューボタン(右下の歯車など)が表示されているか。false[showmenubutton], [hidemenubutton]メニューボタンの表示/非表示状態を保持する。○
    resizecallObject画面リサイズ時に呼び出すコール情報 (storage, target)。{storage:"", target:""}[set_resizecall]画面リサイズイベント発生時に [call] を実行するために使用。○
    vchatObjectVChat モードの状態 (is_active, chara_name_color, max_log_count, charas)。{is_active:false, chara_name_color:"0x70c7ff", max_log_count:200, charas:{}}[vchat_in], [vchat_config], [vchat_chara]VChat モードの有効/無効、表示設定、キャラクター情報を管理する。○
    message_configObject[message_config] で設定されたテキスト関連の詳細設定。{}[message_config][text] などのテキスト表示処理で参照される。○
    word_nobreak_listArrayワードブレイク(単語途中での改行)を禁止する単語リスト。[][message_config] (add/remove)[text] タグのHTML生成時に参照され、該当単語が <span> で囲まれる。○
    lipsync_buf_charaObject口パク対象となるSEバッファとキャラ名のマッピング。キーがバッファ番号。{}[chara_layer] (lip_se_buf_all属性)[playse] 時に参照され、対応するキャラの口パクを開始する。○
    checkpointObject[checkpoint] で登録されたゲーム状態のスナップショット。キーがチェックポイント名。{}[checkpoint], [rollback], [clear_checkpoint][rollback] 時に指定されたチェックポイントの状態を復元するために使用。○
    titleStringゲームタイトル。""[title]ブラウザのタイトルバーやタブに表示される。○
    plus_lighterString"true" または "false"。キャラクターパーツに mix-blend-mode: plus-lighter; を適用するか。"false"[chara_config]キャラクター表示時に参照される。○
    glyph_pmObject[glyph fix=false] で設定されたクリック待ちグリフのパラメータ。null[glyph]showNextImg で参照される。○
    glyph_fix_pmObject[glyph fix=true] で設定された固定クリック待ちグリフのパラメータ。null[glyph]showNextImg で参照される。○
    glyph_skip_pmObject[glyph_skip] で設定された固定スキップモードグリフのパラメータ。null[glyph_skip]setSkip で参照される。○
    glyph_auto_pmObject[glyph_auto fix=true] で設定された固定オートモードグリフのパラメータ。null[glyph_auto]setAuto で参照される。○
    glyph_auto_next_pmObject[glyph_auto fix=false] で設定されたメッセージ末尾オートモードグリフのパラメータ。null[glyph_auto]setAuto で参照される。○
    glyph_pm_restoreObjectオートモード開始前の glyph_pm の退避用。nullsetAutoオートモード終了時に glyph_pm を復元するために使用。○
    glink_configObject[glink_config] で設定された [glink] 自動配置の設定。{}[glink_config][s] タグや [glink] タグで参照される。○
    hold_glinkBoolean[glink hold=true] がクリックされた場合に true。false[glink] (hold属性), [jump][jump] タグ実行時に参照され、true ならば対応する storage/target を使用する。○
    hold_glink_storageString[glink hold=true] の storage。""[glink] (hold属性), [jump][jump] タグ実行時に参照される。○
    hold_glink_targetString[glink hold=true] の target。""[glink] (hold属性), [jump][jump] タグ実行時に参照される。○
    loading_logObject[loading_log] で設定されたローディングログの設定。{}[loading_log]showLoadingLog, hideLoadingLog で参照される。○
    hidden_svg_listArray[xanim svg] でロードされた <svg> 要素の情報(ファイルパスなど)。[][xanim] (svg属性)ロード時に <svg> 要素を復元するために使用。○

    kag.tmp

    kag.tmp は一時的な状態やキャッシュ情報を保持する。セーブ・ロードの対象外である。

    プロパティ名型説明初期値(推測)関連タグ/処理期待される動作/役割
    checking_macroBooleanマクロ定義読み込み中 ([macro] から [endmacro] まで) は true。false[macro], [endmacro]マクロ定義中のタグが実行されないように制御する。
    ready_audioBooleanオーディオ再生準備完了フラグ(主にスマホブラウザ向け)。falsereadyAudiotrue になると音声再生が可能になる。初回ユーザーインタラクション時に true になる。
    audio_contextAudioContextWeb Audio API の AudioContext インスタンス。nullinitオーディオ処理の基盤。
    num_animNumber実行中のアニメーション([anim])のスタック数。0pushAnimStack, popAnimStack[wa] で参照され、0 になるまで待機する。
    map_bgmObject再生中の BGM の Howl オブジェクト(キー:buf)。{}[playbgm], [stopbgm], [fadeinbgm], [fadeoutbgm], [xchgbgm], [pausebgm], [resumebgm], [bgmopt], [changevol]BGM の再生、停止、音量変更などを制御するために使用。
    map_seObject再生中の SE の Howl オブジェクト(キー:buf)。{}[playse], [stopse], [fadeinse], [fadeoutse], [pausese], [resumese], [seopt], [changevol]SE の再生、停止、音量変更などを制御するために使用。
    sleep_gameObject/null[sleepgame] 実行時にゲーム状態のスナップショットが格納される。null[sleepgame], [awakegame], [breakgame][awakegame] で復帰するために使用。
    sleep_game_nextBoolean[awakegame] 実行時に nextOrder を呼ぶか。falsesetGameSleep[sleepgame] の next パラメータに応じて設定される。
    base_scaleNumberゲーム画面の基本スケーリング値(未使用?)。1--
    is_se_playBooleanSE が再生中か。false[playse], [stopse], [wse][wse] で参照される。
    is_se_play_waitBoolean[wse] 実行中に true。false[wse], SE再生完了時SE 再生完了時に nextOrder を呼ぶために使用。
    is_vo_playBooleanボイスが再生中か。false[playse] (ボイスの場合), [stopse] (ボイスの場合), [l], [p]オートモード時の進行制御に使用。
    is_vo_play_waitBooleanオートモード中にボイス再生完了待ちの場合 true。false[l], [p], ボイス再生完了時ボイス再生完了時に nextOrder を呼ぶために使用。
    is_bgm_playBooleanBGM が再生中か。false[playbgm], [stopbgm], [wbgm][wbgm] で参照される。
    is_bgm_play_waitBoolean[wbgm] 実行中に true。false[wbgm], BGM再生完了時BGM 再生完了時に nextOrder を呼ぶために使用。
    loading_make_refBooleanmake.ks ロード中に true?false[return] (from make.ks)ロード完了イベントの発火制御?
    cut_nextorderFunction/nullnextOrder を一時的に上書きするコールバック関数。nullstartTag (cb指定時), nextOrderstartTag でコールバックが指定された場合に、nextOrder の代わりにそのコールバックを実行するために使用。
    wait_idString/NumbersetTimeout の ID ([wait] 用)。""[wait], [wait_cancel][wait_cancel] でタイマーを解除するために使用。
    map_chara_talk_topObject発言中アニメーション中のキャラクターとその開始 top 位置。{}chara_ptextアニメーションの重ねがけ防止?
    camera_streamBoolean[bgcamera] でカメラストリームが有効か。false[bgcamera], [stop_bgcamera]checkPicture で参照される。
    video_playingBoolean[bgmovie] で背景動画が再生中か。false[bgmovie], [stop_bgmovie][bgmovie] の再生制御に使用。
    angleNumberスマホの画面角度(window.orientation)。0init_game, resize イベント[3d_gyro] などで使用?
    largerWidthBoolean画面の横幅が縦幅より大きい場合に true。falseinit_game, resize イベント[set_resizecall] などで使用?
    threeObjectThree.js 関連の状態 (stat, groups, models, evt など)。{stat:{...}, groups:{}, models:{}, evt:{}}[3d_*] タグ全般Three.js のシーン、カメラ、レンダラー、モデル、イベントなどを管理する。
    preload_audio_mapObject[preload] で読み込まれた Howl オブジェクトのキャッシュ(キー:src)。{}[preload], [playbgm], [playse]音声ファイルのプリロード状態を管理。
    mode_effectObject[mode_effect] で設定されたモード変化エフェクト情報。{pc:{...}, phone:{...}}[mode_effect], setAuto, setSkipスキップ/オートモード切り替え時のエフェクト表示に使用。
    current_actorStringLiveNovel 用の現在のアクター名?(コード片には関連処理なし)""--
    screen_infoObject現在のゲーム画面のスケーリング情報(scale_x, scale_y, width, height, top, bottom, left, right, original_width, original_height, viewport_width, viewport_height)。{}resize イベント画面のリサイズ時に更新され、仮想マウスカーソル (vmouse) の座標計算などに使用される。
    speak_on_volumeNumberテキスト読み上げの音量 (0.0-1.0)。1.0[speak_on]speechMessage で参照される。
    speak_on_pitchNumberテキスト読み上げのピッチ (0.0-2.0)。1.0[speak_on]speechMessage で参照される。
    speak_on_rateNumberテキスト読み上げの速度 (0.1-10.0)。1.0[speak_on]speechMessage で参照される。
    speak_on_cancelBoolean読み上げ中に次の読み上げが来た場合にキャンセルするか。false[speak_on]speechMessage で参照される。
    speak_on_utteranceSpeechSynthesisUtterance現在読み上げ中の SpeechSynthesisUtterance オブジェクト。nullspeechMessagespeak_on_cancel=true の場合にキャンセルするために使用。
    j_cursor_cssjQuery[cursor] で追加された <style> 要素の jQuery オブジェクト。null[cursor]カーソルスタイルを上書きするために使用。
    cursor_hide_timerNumber/nullカーソル自動非表示の setTimeout ID。null[cursor] (auto_hide属性)マウス移動時にタイマーをリセットし、タイムアウトでカーソルを非表示にする。
    is_cursor_visibleBoolean仮想マウスカーソルが(自動非表示機能により)表示されているか。true[cursor] (auto_hide属性)マウス移動時にカーソルを再表示するかどうかの判定に使用。
    prev_screen_effect_typeString最後に表示したモードエフェクトのタイプ (skip, auto, stop など)。""showModeEffect同じエフェクトが連続で表示されるのを防ぐ。
    screen_effect_timer_idNumber/nullモードエフェクト表示の setTimeout ID。nullshowModeEffectモード切り替えからわずかな遅延後にエフェクトを表示するためのタイマー。
    loading_log_timer_idNumber/nullローディングログ表示開始の setTimeout ID。nullshowLoadingLog一定時間 (min_time) 経過後にローディングログを表示するためのタイマー。
    loading_log_hide_timer_idNumber/nullローディングログ非表示の setTimeout ID。nullhideLoadingLogログ表示が完了した少し後に非表示にするためのタイマー。
    j_loading_logjQueryローディングログの DOM 要素。null[loading_log]ローディングログの表示/非表示に使用。
    j_loading_log_messagejQueryローディングログのテキスト部分の DOM 要素。null[loading_log]ローディングログのテキスト設定に使用。
    j_loading_log_iconjQueryローディングログのアイコン部分の DOM 要素。null[loading_log]ローディングログのアイコン表示/非表示に使用。
    should_set_reverse_indentBooleanカギカッコフロートが必要か([text] タグ内で使用される一時フラグ)。false[text] (showMessage)[text] タグの内部処理用。
    is_text_strokeBoolean-webkit-text-stroke による縁取りが有効か([text] タグ内で使用される一時フラグ)。false[text] (showMessage)[text] タグの内部処理用。
    is_edge_overlapBoolean縁取りを前の文字に重ねるか([text] タグ内で使用される一時フラグ)。true[text] (showMessage)[text] タグの内部処理用。
    is_individual_decorationBoolean1文字ずつ個別に装飾するか([text] タグ内で使用される一時フラグ)。false[text] (showMessage)[text] タグの内部処理用。
    text_shadow_valuesArraytext-shadow による個別縁取り時の各影の値([text] タグ内で使用される一時配列)。[][text] (showMessage)[text] タグの内部処理用。
    inside_stroke_colorStringtext-shadow による個別縁取り時の文字本体の色([text] タグ内で使用される一時変数)。""[text] (showMessage)[text] タグの内部処理用。
    ch_speedNumber現在適用中の文字表示速度(ミリ秒/文字)([text] タグ内で使用される一時変数)。30[text] (addChars)[text] タグの内部処理用。
    effect_speedString現在適用中の文字エフェクト速度([text] タグ内で使用される一時変数)。"0.2s"[text] (addChars)[text] タグの内部処理用。
    last_char_infoObject/null最後に表示した文字の情報 (left, top, j_char)(禁則処理用)。null[text] (showMessage, controlLineBreak)[text] タグの禁則処理で使用。
    processed_click_interruptBoolean文字表示中のクリック割り込みを処理済みか([text] タグ内で使用される一時フラグ)。false[text] (addChars, checkClickInterrupt)[text] タグの内部処理用。
    text_lipsync_target_partsArray/nullテキストによるリップシンク対象パーツ情報([text] タグ内で使用される一時配列)。null[text] (startLipSyncWithText, stopLipSyncWithText)[text] タグのリップシンク処理で使用。
    quake2_finishFunction/false[quake2] アニメーションを終了させる関数。終了後は false。false[quake2][quake2] のアニメーション制御で使用。
    quake2_timer_idNumber/null[quake2] の requestAnimationFrame ID。null[quake2][quake2] のアニメーション制御で使用。
    __j_hiden_areajQuery/null<div id="hidden_area"> の jQuery オブジェクトキャッシュ。nullgetHiddenAreaパフォーマンス向上のためのキャッシュ。

    kag.variable

    kag.variable はゲーム変数を管理する。

    • f: ゲーム変数 (kag.stat.f への参照)。シナリオ内で自由にアクセス可能 (f.hoge = 10)。セーブ・ロード対象。
    • sf: システム変数。ゲーム間で共有される可能性のある設定や状態。シナリオ内で自由にアクセス可能 (sf.hoge = "abc")。localStorage またはファイルに永続化され、セーブ・ロード対象。
    • tf: 一時変数。現在のシナリオファイルやマクロ内でのみ有効。シナリオ内で自由にアクセス可能 (tf.hoge = true)。セーブ・ロード対象外。ロード時や clearTmpVariable で初期化される(ただし tf.system は保持される)。
      • tf.system: バックログ (backlog) などのシステム内部で使用される一時情報を保持する。

    その他の状態

    • kag.layer.map_layer_fore / map_layer_back: 各レイヤの表/裏ページの jQuery オブジェクトを保持。DOM構造やスタイル情報が含まれる。セーブ・ロード対象(HTML 文字列として)。
    • kag.layer.layer_free: フリーレイヤの jQuery オブジェクト。セーブ・ロード対象。
    • kag.layer.layer_event: イベントレイヤの jQuery オブジェクト。
    • kag.layer.layer_menu: メニューレイヤの jQuery オブジェクト。
    • kag.event.event_listener_map: kag.on で登録されたイベントリスナーを保持。
    • kag.menu.snap: [savesnap] や [sleepgame] 実行時に一時的にゲーム状態のスナップショットが格納される。

    状態遷移

    • タグ実行: kag.ftag.nextOrder() が呼ばれるたびに current_order_index が増加し、対応するタグの start メソッドが実行される。多くのタグは start メソッド内で状態 (kag.stat, kag.tmp) を変更し、DOM を操作する。非同期処理(アニメーション、ウェイト、トランジションなど)を行うタグは、完了時に nextOrder を呼ぶか、対応する待機タグ ([wt], [wa]) で進行を再開させる。
    • セーブ: doSave メソッド内で kag.stat, kag.layer の情報、current_order_index などがスナップショット (kag.menu.snap) として取得され、指定されたストレージ(localStorage or ファイル)に保存される。
    • ロード: loadGameData メソッド内で保存されたデータが読み込まれ、kag.stat, kag.layer などが復元される。その後、make.ks を経由して元の current_order_index からゲームが再開される。ロード時には一時的な状態 (kag.tmp) は基本的にリセットされる。

    以上。

    ===============広告=================

    darallium

    Sat May 03 2025 00:00:00 GMT+0900 (Japan Standard Time)