TM紙芝居 3.2 機能拡張ガイド

Copyright © 2026 Hiroya Kubo. この文書はCC BY-SA 4.0で提供します。引用図版には各出典の条件が適用されます。

全34ページ。16個の機能拡張を、1拡張につき2ページの見開きで図解する

左ページ・青機能拡張そのもの公式ドキュメントに基づく動作・入力・出力・制約
右ページ・橙TM紙芝居での利用例なぜ必要か、実プロジェクトのどこでどう使うか

kamishibai=3.1kamishibai=3.2の台本を動かす3.2.xアプリは、次の16機能拡張を利用します。 読む順番は実行時の読込順ではなく、Gallery由来 → TurboWarp標準 → 外部埋め込み → アプリ内蔵です。

2種類の数え方: このガイドは保守するソース単位で16個を説明します。一方、bundle版SB3では、そのうち4個をtmbundleという1個のIDにまとめます。詳しくは次ページを参照してください。

右ページの実画面例はTurboWarp Editorを高解像度で撮影し、SVG Textだけは公開済み図解ガイドを撮影しています。詳しい呼出し関係は内部仕様書、更新手順はメンテナンスガイドを参照してください。

4拡張を1つのIDへまとめる

2 / 34 sb3-toolchainのbundle

生成時の変換tmbundle4 components → 1 ID

このガイドで説明する16個は、更新・検査する論理上の機能拡張です。 sb3-toolchainでbundle版SB3を生成すると、相互に動的opcode参照を行う4個だけを、1個の複合機能拡張へまとめます。

保守する4個のソースkubohiroyaassetmanager Asset Managertext Animated Textkubohiroyakamishibairuntime Kamishibai Runtimekubohiroyasvgtext SVG Text
sb3-toolchainビルド時だけ変換
bundle版SB3で見えるIDtmbundle1 embedded data URL1 register()1 permission unit
このガイド/source16論理上の機能拡張
bundle版SB313読込ID

bundle外12個 + tmbundle 1個

sourceは展開したまま

  • 4拡張を個別に更新・検査
  • GitHub/npmの固定由来を保持
  • checksyncも個別に実行

生成物だけを集約

  • opcodeとstorageをmember別にnamespace化
  • member間の動的opcode参照も変換
  • 復元用capsuleにより展開可能

重要: 16個の機能が13個へ減るわけではありません。実装を統合するのではなく、配布するSB3の読込・登録単位だけをまとめる仕組みです。依存のないGallery拡張、Translate、TurboWarp TMなど12個はbundleの外に残ります。

実行時の直接依存関係矢印の先の拡張APIを呼び出す。bundleへの所属とは別の関係です。
Kamishibai Runtime
Asset ManagerRuntime ExpressionTemporary VariablesTranslate言語fallbackAnimated TextSVG失敗時
Asset Manager
Temporary VariablesAnimated Text
Runtime Expression
Temporary Variables
Async Input
Temporary VariablesTurboWarp TMposeInputは現在OFF
実線: 現行アプリの利用経路で必要破線: fallback/既定OFFの任意経路

Consoles、Text、Local Storage、More Timers、Files、Text Lines、TurboWarp TM、SVG Text、Web Linkは、他拡張を直接呼ばず、Stageのblockとruntime変数を介して連携します。

出典: sb3-toolchain: Extension bundlesVersion 3.2.0 埋め込みmanifest依存APIの実装

Consoles — ログ・警告・エラー・計測結果をブラウザーコンソールへ出力する

Gallery 1 / 7 機能拡張そのもの 1 / 2

Gallerysipcconsole開発支援

ブラウザーの開発者ツールにあるJavaScript consoleへ、値をlog、warn、errorなどの種類で出力する拡張です。 group、経過時間の計測、consoleの消去もblockから操作でき、実行中の処理をまとまりと時系列で追跡できます。

配布ソースの機能要約:記録の種類とconsole上の整理
log / info
warn / error
group・timerで整理ブラウザーのconsole

記録する

  • 通常値、情報、warning、error
  • 複数値の結合と整形
  • 開発者ツールへ即時出力

追跡する

  • 処理をgroup化
  • timerの開始・終了
  • 前回のconsoleを消去

出典: Galleryバナー配布ソース

Consolesで台本の実行状況をログへ記録し、停止した処理を突き止める

Gallery 1 / 7 TM紙芝居での利用例 2 / 2

TurboWarp Editorのexec scene定義冒頭で、scene context設定に続いて2つのConsolesログを実行する画面
「exec scene # …」の入口。scene contextを設定し、区切りとscene番号・labelを2つのlogへ記録する順序が分かる範囲だけを示します。
いつ使う?scene開始、待機、asset生成、Actor処理の節目。
何が分かる?どのcommandまで進み、どこで止まったか。
異常時Kamishibai RuntimeのSVGと同じ原因をconsoleにも残す。

このアプリでの役割: 緑の旗で古いconsoleを消し、journalで進行、errorで異常を記録します。表示用errorと開発用logを混ぜないことが重要です。

ブロック例: Version 3.2.0 project source(Stage: exec scene # %s with %s

Temporary Variables — 実行範囲の異なる一時変数を作成・共有する

Gallery 2 / 7 機能拡張そのもの 1 / 2

GallerylmsTempVars2状態管理

Scratch変数を増やさず、処理の途中だけ必要な名前付き値を保持します。 一つのcustom block内だけのthread variableと、project全体で共有するruntime variableを使い分けます。

配布ソースの機能要約:値を置く場所で寿命と共有範囲が変わる
custom blockの呼出しthread variable
その実行だけ
runtime variable
project全体

thread variable

  • blockの実行stackに所属
  • 再帰や同時実行で値を分離
  • 処理終了後に捨てられる

runtime variable

  • 全target・拡張から共有
  • 名前で作成・更新・削除
  • project停止時までの一時値

出典: Galleryバナー配布ソース

Temporary Variablesで処理ごとの一時値を分け、同時実行による上書きを防ぐ

Gallery 2 / 7 TM紙芝居での利用例 2 / 2

TurboWarp Editorのcreate asset定義から、asset解析に使うthread variableブロックだけを切り出した画面
「create asset」の解析部分。indexからasset、skin、resourceIdへ値を受け渡すthread variableの連鎖です。
局所値assetName、address、引数番号をthreadへ置く。
共有値scene、入力状態、Loading進捗をruntimeへ置く。
連携Runtime ExpressionとAsync Inputが同じruntime値を読む。

注意: runtime variableも永続保存ではありません。再起動後に残す値はLocal Storageを使い、green flag時にruntimeへ戻します。

ブロック例: Version 3.2.0 project source(Stage: create asset

Text — 文字列を検索・分割・置換する

Gallery 3 / 7 機能拡張そのもの 1 / 2

Gallerystrings文字列処理

文字や文章を検索、分割、置換、比較、trimするための文字列演算拡張です。 「含むか」を調べるだけでなく、区切りごとの項目取得、部分文字列、文字種変換などを値blockとして組み合わせられます。

公式Galleryと配布ソースの要約:文字列を調べ、必要な形へ作り直す
元のtext検索・count・比較split・replace・trim値/整形済みtext

形を調べる

  • 文字数と出現回数
  • 前方・後方一致
  • 厳密な文字列比較

値を取り出す

  • 区切り文字でsplit
  • 部分文字列
  • 前後の空白をtrim

出典: Galleryバナー配布ソース

Textで台本のコマンド名と引数を、区切り文字から読み取る

Gallery 3 / 7 TM紙芝居での利用例 2 / 2

TurboWarp EditorのselectValue定義から、Text拡張で区切り文字と項目を扱うreturn部分だけを切り出した画面
「selectValue # …」の中核。区切り文字の出現数を調べ、指定項目をtrimして返す2つの分岐です。
commandasset=...の最初の=を境界にする。
引数comma区切りの指定位置を取得する。
比較空文字・command名・action名を厳密に照合する。

区別: このTextは文字列演算のstringsです。Stageへ文字を描くAnimated Text(ID: text)とは別物です。

ブロック例: Version 3.2.0 project source(Stage: selectValue # %s separated by %s from %s

Local Storage — 文字列をブラウザーへ保存・取得・削除する

Gallery 4 / 7 機能拡張そのもの 1 / 2

Gallerylocalstorage永続保存

ブラウザーの保存領域に、project固有のnamespaceで文字列を保持します。 Scratch変数と違い、ページを閉じた後でも次回起動時に読み戻せます。

公式ドキュメントの図解要約:namespaceでprojectごとの保存領域を分ける
key + plain textproject namespaceブラウザーのstoragereload後も取得

できること

  • plain textの保存・取得・削除
  • namespace単位の全削除
  • 別windowでの変更検知

性質と制約

  • 通常変数より書込が遅い
  • Web版は容量が小さい
  • 同じnamespaceは互いに上書き

出典: Galleryバナー公式ドキュメント

Local Storageで選んだ台本と言語設定を保存し、次回起動時に復元する

Gallery 4 / 7 TM紙芝居での利用例 2 / 2

TurboWarp EditorのstartStory処理から、Local Storageの名前空間設定とscript保存だけを切り出した画面
名前空間をkamishibaiに定め、runtimeのscriptをstorageへ書く、隣接した2ブロックです。
起動時保存済み言語を読み、なければTranslateへ進む。
台本選択Filesで開いたtextを保存し、reloadで再利用する。
UI操作言語変更時に保存値とruntime値を同時更新する。

注意: 同じprojectを複数tabで開くと、後から保存したwindowが値を上書きする可能性があります。小さな設定と台本文字列だけを対象にします。

ブロック例: Version 3.2.0 project source(Stage: green flag)

More Timers — 複数の名前付きタイマーを個別に管理する

Gallery 5 / 7 機能拡張そのもの 1 / 2

GallerylmsTimers時間管理

標準timerを一つだけでなく、文字列で名付けた複数のタイマーとして並行管理します。 各timerを個別に開始、pause、resume、reset、増減、削除できるため、重なった処理の経過時間を独立して扱えます。

公式Galleryと配布ソースの要約:名前ごとに独立したtimerのlife cycle
start / resetpause / resume
値を読む・増減
remove

個別timer

  • 名前で作成・照会
  • pause/resume
  • reset、増減、削除

複数のタイマー

  • 互いの値を上書きしない
  • 存在する名前を確認
  • 必要なら全timerを削除

出典: Galleryバナー配布ソース

More Timersで待機時間を計測しながら、利用者のスキップ操作にも応答する

Gallery 5 / 7 TM紙芝居での利用例 2 / 2

TurboWarp Editorのwait定義から、More Timersの開始、値取得、削除を含む接続部分だけを切り出した画面
「wait seconds」のtimer部分。開始/reset、経過値の監視、最後の削除までを一続きで示します。
通常終了指定秒数へ達したらloopを抜ける。
skipruntimeのskip状態でもloopを抜ける。
後片付けどちらの終了でも名前付きtimerを削除する。

設計上の要点: Scratchの長い「待つ」ブロックに任せず、短いloopでtimerとskipを同時に監視します。これによりプレイ中の操作へすぐ反応できます。

ブロック例: Version 3.2.0 project source(Stage: wait %s seconds

Files — ローカルファイルの読込みとダウンロードを行う

Gallery 6 / 7 機能拡張そのもの 1 / 2

Galleryfilesファイル入力

利用者が選択またはdrag & dropしたlocal fileを、textまたはdata URLとしてprojectへ渡す拡張です。 逆にproject内の値をfilename付きでdownloadでき、ブラウザーのfile pickerとTurboWarpのblockを橋渡しします。

公式Galleryと配布ソースの要約:local fileを値へ、値をdownloadへ
click / dropfile pickertext / data URL
+ filename
download

入力

  • 拡張子・MIME type指定
  • text/data URL
  • cancel時は空文字

出力

  • filename付きdownload
  • ブラウザー内で完結
  • 明示的な利用者操作から開始

出典: Galleryバナー配布ソース

Filesで参加者が選んだTXT台本を、埋め込み台本と同じ検査・実行経路へ渡す

Gallery 6 / 7 TM紙芝居での利用例 2 / 2

TurboWarp Editorの初期化処理から、Filesのモード設定と直後のshowTitle broadcastだけを切り出した画面
ファイル選択を「すぐにセレクターを開く」に設定してから、title画面を表示する2ブロックです。
UiItemmenu buttonの操作からpickerを開く。
runtime選択した全文をscriptへ渡す。
合流埋め込み台本と同じpreflight・asset登録へ進む。

安全性: pickerは利用者clickに続いて開きます。cancelで空文字になった場合は、保存済み台本を勝手に置き換えません。

ブロック例: Version 3.2.0 project source(UiItem: runUiItemAction

Animated Text — 文字列をスプライトの見た目として描画・アニメーションする

Gallery 7 / 7 機能拡張そのもの 1 / 2

Gallerytext文字描画

spriteへ文字専用のrenderer skinを作り、font、色、幅、配置、outlineを設定して表示する拡張です。 文章をtyping、rainbow、zoom、shakeなどで演出でき、Scratch LabのAnimated Text実験と互換性があります。

公式Galleryと配布ソースの要約:textをspriteの見た目へ変換する
text + font
色・幅・配置
renderer skinspriteへ表示animation

style

  • font、色、outline
  • 幅、折返し、align
  • spriteのskinとして描画

animation

  • typing
  • rainbow、zoom
  • shakeなどの演出

出典: Galleryバナー配布ソース

Animated Textで台詞やメニューの文字列を画面へ描画する

Gallery 7 / 7 TM紙芝居での利用例 2 / 2

TurboWarp EditorのStageから、Asset Managerで文字assetを登録しstyleを設定する接続部分だけを切り出した画面
実プロジェクトでは、文字をAsset Managerへ登録し、font・color・width・alignを設定します。ここに見える青いblockはAsset Managerであり、Animated Textの呼出しはその内部で行われます。
project側Asset Managerでtext assetとstyleを登録する。
内部呼出しtext_setFont等のopcodeをruntimeから取得する。
描画時text_setTexttext_animateTextでskinを作る。

重要: 接続済みscriptにAnimated Text blockはありません。Asset Managerが表示時にtext_setFonttext_setColortext_setWidthtext_setTexttext_animateTextをprogrammaticに呼ぶ依存関係です。

DSL 3.2: この経路は旧Text Assetのdeprecated互換機能として少なくとも3.2系列で維持します。3.2.0にはturbowarp-svg-textも組み込まれており、新旧を併用できます。

ブロック例: Version 3.2.0 project source(text asset登録・style設定)、内部実装: Asset ManagerからAnimated Text opcodeを取得する処理

Translate — 文章を翻訳し、閲覧環境の言語を取得する

TurboWarp標準 1 / 1 機能拡張そのもの 1 / 2

TurboWarp標準translate表示言語

Scratch/TurboWarp標準の翻訳拡張です。文章と翻訳先の言語を指定するblockに加え、viewerで選択中の言語を返します。 翻訳結果とviewer languageは別のreporterであり、後者は通信せずに現在のlocale名を取得します。


Language
翻訳とviewer言語を別々に取得

文章の翻訳結果と、現在のTurboWarp UIが使う言語名をreporterとして返します。

scratch-vm実装の要約:二つの独立したreporter
text + target languagetranslationviewer localelanguage名

翻訳reporter

  • 入力textと翻訳先を指定
  • 対応言語から選択
  • 結果を文字列で返す

language reporter

  • viewerのlocaleを取得
  • 通信を必要としない
  • UI初期値の判断に使える

出典: 固定scratch-vmのTranslate実装

Translateで閲覧環境の言語を取得し、初期表示へ反映する

TurboWarp標準 1 / 1 TM紙芝居での利用例 2 / 2

TurboWarp Editorの初期化条件から、Translateの言語reporterと親のor条件だけを切り出した画面
保存済み言語がないときの条件内にあるTranslateの「言語」reporter。日本語/英語の初期判定に使います。
優先1Local Storageに保存済みの利用者選択。
優先2Translateのviewer language。
結果runtime変数を通して全UIへbroadcast。

方針: ブラウザーのlocaleを毎回強制せず、利用者が一度選んだUI言語を優先します。Translateは初期値を決める補助です。

ブロック例: Version 3.2.0 project source(Stage: green flag)

Asset Manager — 異なる場所・種類の素材を名前付きで管理・操作する

外部埋め込み 1 / 6 機能拡張そのもの 1 / 2

外部埋め込みkubohiroyaassetmanager0.4.1

Web上の画像・音声、SB3内のcostume・backdrop・sound、実行時textを一つの名前付き登録簿で扱います。 登録後は素材の置き場所や種類に応じた処理を拡張が選び、共通のasset名で表示、再生、animation、cacheを操作できます。

A
Assets
素材の住所を隠す登録簿

URL、project内素材、textを同じasset名へまとめ、Stage・Actor・音声へ配ります。

公式図解ガイドの要約:異なる素材を一つの登録簿から適切な出力先へ
Web URL
project内素材
動的text
名前 + 種類を登録
Web素材はcache
sprite / Stage
sound / Actor timeline

読込

  • 種類判定と取得
  • IndexedDB cache
  • Loading用の素材を先行

利用

  • Stage/sprite skin
  • 音声再生・停止
  • Actor loop/sequence

出典: Asset Manager図解ガイド固定commit c55e657

Asset Managerで台本指定の素材を読み込み、名前で背景・登場人物・音を操作する

外部埋め込み 1 / 6 TM紙芝居での利用例 2 / 2

TurboWarp Editorのcreate asset定義から、Asset Managerの読込確認、登録、背景設定だけを切り出した画面
読込完了を待ち、resourceをassetとして登録し、Loading用なら背景へ反映する接続部分です。
開始前Loading backdropとcostumeを先に登録。
登録中台本の全assetを名前・addressで登録。
実行中同じ名前で背景、Actor、音、textを操作。

address例: costume:Actor:hero1backdrop:seasound:Stage:bell。project内参照はsprite名と素材名を正確に指定します。

ブロック例: Version 3.2.0 project source(Stage: create asset

TurboWarp TM — 学習済みモデルでカメラ映像のポーズを認識する

外部埋め込み 2 / 6 機能拡張そのもの 1 / 2

外部埋め込みkubohiroyatm1.4.0

Teachable Machine Pose modelとカメラ映像を接続し、現在のpose名とconfidenceをTurboWarpの値として返します。 model、camera、preview、predictionを別々に開始・停止できます。


Pose
身体の動きを数値と名前へ

カメラ映像から骨格を推定し、Teachable Machineで学習したposeごとのconfidenceを返します。

公式図解ガイドの要約:1枚の映像から現在値と時間でならした値へ
カメラ映像姿勢推定
keypoints
TM classifierlabel・confidence
蓄積score

現在の認識

  • pose labelとconfidence
  • すばやい動きへ即時反応
  • camera previewを配置

時間を含む認識

  • confidenceを蓄積・減衰
  • 一瞬の揺れを平滑化
  • 開始・停止を個別管理

出典: TurboWarp TM図解ガイド固定commit 08fe0cf

TurboWarp TMで観客のポーズを認識し、物語を進める入力として扱う

外部埋め込み 2 / 6 TM紙芝居での利用例 2 / 2

TurboWarp Editorから、TurboWarp TMの認識開始とcamera preview表示を呼ぶ2つの補助定義だけを切り出した画面
start pose recogstart camera preview。各custom blockが対応するTurboWarp TM blockを1つずつ呼びます。
scene準備TMPoseURLでmodelをload。
action指定poseのscoreが閾値を超えるまで反復。
終了skip、scene終了、stopでpredictionとcameraを停止。

実行条件: camera権限とHTTPSが必要です。modelとTensorFlow/Teachable Machine libraryの取得にはnetwork接続を使います。

ブロック例: Version 3.2.0 project source(Stage: setTMPoseURL / exec pose

Text Lines — 複数行の文字列を行単位で取得・リスト化する

外部埋め込み 3 / 6 機能拡張そのもの 1 / 2

外部埋め込みkubohiroyatextlines0.1.1

長いtextを改行位置で分割し、行数、指定行、Scratch listとして扱います。 LF、CRLF、CRを同じ改行として正規化するため、台本を作ったOSに依存しません。


Lines
一つのtextを物理行へ

元sourceの行番号を保ったまま、preflightと実行loopへ渡します。

公式図解ガイドの要約:1つの入力から用途別の3つの結果を得る
複数行textLF / CRLF / CR
を正規化
行数
指定した1行
list全置換

入力

  • LF、CRLF、CR
  • 空行を含む全文
  • UTF-8の台本文字列

出力

  • 行数
  • 1始まりの指定行
  • list全置換

出典: Text Lines図解ガイド固定commit 8655d76

Text Linesで台本を行ごとに分け、エラー表示を元のTXTの行番号へ対応させる

外部埋め込み 3 / 6 TM紙芝居での利用例 2 / 2

TurboWarp Editorのcreate sceneList定義から、Text LinesでsceneBlockをlinesへ展開する周辺だけを切り出した画面
scene単位に切り出した文字列を、Text Linesの1 blockでlines listへ展開する部分です。
preflight物理行番号とcommandを一緒に検査。
実行同じlines listをscene生成へ渡す。
診断errorの行番号を元TXTへ正確に対応。

listの扱い: 書込blockは追記ではなく全置換です。前回台本の行が残らないため、reloadしても行番号がずれません。

ブロック例: Version 3.2.0 project source(Stage: create sceneList

Runtime Expression — 一時変数を参照する制限付き条件式を安全に評価する

外部埋め込み 4 / 6 機能拡張そのもの 1 / 2

外部埋め込みkubohiroyaruntimeexpression0.2.0

Temporary Variablesのruntime値を、JavaScriptに似た制限付き条件式から参照し、true/falseを返します。 任意codeを実行せず、許可した比較、論理、算術、括弧だけを評価します。

{?}
Expr
状態を真偽値と変化eventへ

score >= 3 && hasKeyのような式を検査して評価し、必要ならfalse/trueの変化をbroadcastします。

公式図解ガイドの要約:現在の判定と、判定結果が変わった時の通知
runtime variables
+ 条件式
制限付きparsertrue / falsefalse↔true時だけ
broadcast

条件reporter

  • 比較、論理、算術、括弧
  • vars["日本語名"]
  • 代入・関数呼出しは禁止

条件付きbroadcast

  • 最初の状態を記憶
  • 結果が変化した時だけ通知
  • IDで置換・解除・timeout

出典: Runtime Expression図解ガイド固定commit 7e2bd99

Runtime Expressionで台本の条件式を安全に評価し、最初に成立した場面へ進む

外部埋め込み 4 / 6 TM紙芝居での利用例 2 / 2

TurboWarp Editorのexec branch action定義で、condition文字列を取り出し、Runtime Expressionで評価して次の条件へ進む画面
branch条件を1件ずつ読むloop。thread variableへ式を取り出し、condition reporterで現在のruntime値に対して評価してから次の条件へ進みます。
登録registerBranchが式とscene labelを保持。
評価上から順にruntime値を使って判定。
決定最初にtrueとなった遷移先だけを採用。

二段階の安全性: Kamishibai Runtimeが実行前にsyntaxを検査し、scene移動時にRuntime Expressionが現在値で評価します。

ブロック例: Version 3.2.0 project source(Stage: exec branch action

SVG Text — 名前付きスタイルで相対サイズの吹き出しとSVG文字を描画する

外部埋め込み 5 / 6 機能拡張そのもの 1 / 2

npm埋め込みkubohiroyasvgtext0.1.0

背景色、文字色、font、相対font size、配置、吹き出し方向を名前付きstyleとして定義し、say/think bubbleとsprite自身のSVG text skinで共有する拡張です。文字列中の\nを複数のSVG tspanへ変換します。

Aa
SVG
画面と一緒に拡大する文字

size 100を480×360 stageの14px相当とし、stage寸法が変わっても相対的な大きさを保ちます。

公式図解ガイドの要約:一つのstyleを二つの表示方法へ適用する
名前付きstyle
+ 複数行text
stage scaleで再計算say / think bubbleSVG text actor

style

  • 背景色・文字色・font
  • size 1〜1000、左右/中央揃え
  • 上下左右と斜めの8方向

再描画

  • stage size変更へ追従
  • 同名styleの再定義へ追従
  • 0.1.0ではanimationなし

出典: SVG Text日本語図解ガイド固定release v0.1.0npm 0.1.0

SVG Textで吹き出しとテキストアクターの見た目を共有する

外部埋め込み 5 / 6 TM紙芝居での利用例 2 / 2

SVG Text日本語図解ガイドにある複数行のsay、think、SVGテキストアクターの使用例
公開済み日本語ガイドの3つの使用例。\nで改行し、同じ名前付きstyleを吹き出しとSVG text actorへ適用します。
headersvgTextStyleで共通styleを定義。
ActorsetTextでActor自身をSVG文字へ変更。
bubblesay|think:TEXT:SECONDS:STYLEで個別に選択。

DSL 3.2: svgTextStyleで定義したstyleを、setTextまたはaction=ACTOR:say|think:TEXT:SECONDS:STYLEから使います。後者は内部でsayWithStylethinkWithStyleを呼び、STYLE省略時はdefaultを使います。旧Text Assetもdeprecated互換として維持します。

ブロック例: Version 3.2.0 project source(Stage: svgTextStyle、Actor: setText)、スタイル付きsay/think実装PR、図版: SVG Text日本語ガイド

Async Input — キー・タッチ・カスタム入力を値更新と通知へ接続する

外部埋め込み 6 / 6 機能拡張そのもの 1 / 2

外部埋め込みkubohiroyaasyncinput0.2.0

key、sprite/cloneのtouch、任意機能のpose入力を、Temporary Variablesのruntime値更新とbroadcastへ接続します。 bindingは登録したtargetが所有し、値を更新してから受信scriptの完了を待たずにmessageを送ります。


Input
異なる入力を同じeventの形へ

key、touch、poseを「runtime値を更新し、必要ならmessageを送る」target所有のbindingへ揃えます。

公式READMEの要約:入力をtarget所有のbindingから共通経路へ流す
key / touch
pose(任意)
target-owned bindingruntime値を先に更新broadcast
待機しない

登録

  • KeyboardEvent.code
  • sprite/clone/Actor名
  • 代入または算術更新

解除

  • cover表示
  • scene境界
  • target削除・stop

出典: Async Input公式README固定commit 3ecd7ff

Async Inputでキー・画面タッチ・ポーズ入力を、競合しない場面遷移へまとめる

外部埋め込み 6 / 6 TM紙芝居での利用例 2 / 2

TurboWarp EditorのkeyInputToChangeScene定義から、Async Input listenerと引数準備を含む接続部分だけを切り出した画面
keyとscene labelを対応付け、listenerがruntime更新とbroadcastを行う1回分のloopです。
key物理keyからscene labelを選ぶ。
touch画面のActor名から同じ遷移へ合流。
競合最初の入力で解決し、残りのlistenerを解除。

後片付け: 登録はtargetごとに所有されます。sceneをまたいだ古いlistenerが次の場面で発火しないよう、境界で必ず停止します。

ブロック例: Version 3.2.0 project source(Stage: keyInputToChangeScene

Kamishibai Runtime — 紙芝居DSLを事前検査し、構造化診断とSVGを生成する

アプリ内蔵 1 / 2 機能拡張そのもの 1 / 2

アプリ内蔵kubohiroyakamishibairuntimeDSL診断

紙芝居DSL 3.1/3.2を実行前に検査し、旧Text Assetのdeprecated警告と、失敗時の分類済み診断・SVG error画面を作るproject専用拡張です。 正常な台本の実行は置き換えず、副作用を始めてよいかだけを判定します。


Preflight
安全に失敗する入口

cameraや音声を始める前に、version、command、参照、条件式をまとめて検査します。

内部仕様の要約:副作用を始める前に段階的に検査し、構造化した結果を返す
DSL + projectversion・構文scene / asset参照
address・条件式
実行許可
/ SVG診断

検査

  • version、command、action
  • scene/asset参照
  • addressと条件式syntax

診断

  • error code
  • 行・列
  • source抜粋とSVG文字

出典: 紙芝居アプリ 3.2 内部仕様書内蔵拡張ソース

Kamishibai Runtimeで素材読込やカメラ開始の前に台本を検査し、エラーを表示する

アプリ内蔵 1 / 2 TM紙芝居での利用例 2 / 2

TurboWarp EditorのstartStory処理から、Kamishibai Runtimeのvalidateと直後の初期化だけを切り出した画面
startStory直後にvalidateし、成功した場合だけskip状態の初期化やcamera開始へ進む順序を示します。
位置startStory直後、asset/cameraより前。
失敗背景作業を始めず、promptへSVG診断を表示。
成功従来のStage custom block群へ処理を返す。

責任境界: DSL parser/実行器全体ではありません。実行前の限定preflightと、利用者が直せる診断表示に責任を絞っています。

ブロック例: Version 3.2.0 project source(Stage: startStory

アプリ内蔵 2 / 2 機能拡張そのもの 1 / 2

アプリ内蔵kubohiroyaweblink外部navigation

受け取ったURLを検証し、ブラウザーの新しいタブで開くproject専用の小さな拡張です。 任意schemeを許可せず、HTTPS URLへの明示的なnavigationだけをblock化します。


HTTPS
アプリの外へ出る一つの安全な扉

絶対URL、HTTPS、noopener/noreferrerを確認してから新しいtabを開きます。

内部仕様の要約:文字列を検証し、開いたtabと元projectを分離する
URL文字列絶対URLとしてparsehttps:だけ許可new tab
noopener / noreferrer

許可

  • 絶対URL
  • https:
  • 利用者clickからの呼出し

拒否

  • http:
  • file:javascript:
  • 通常sceneからの任意navigation

出典: 紙芝居アプリ 3.2 内部仕様書内蔵拡張ソース

アプリ内蔵 2 / 2 TM紙芝居での利用例 2 / 2

TurboWarp EditorのofficialWebsiteButtonから、クリックeventとWeb Link blockだけを切り出した画面
buttonクリック直後に、Web Linkが公式HTTPS URLを新しいtabで開く2ブロックのstackです。
入口公式サイトbutton、open-urlを指定したUI項目。
公式サイトURLまたはUI項目へ設定したHTTPS URL。
制約通常のscene actionからは呼び出さない。

browser policy: popup blockを避けるため、利用者clickに続けて実行します。新しいtabにはnoopener,noreferrerを付けます。

ブロック例: Version 3.2.0 project sourceofficialWebsiteButton