Skip to content

Instantly share code, notes, and snippets.

@miahmie
Created August 29, 2020 11:35
Show Gist options
  • Save miahmie/2b2c580c104cfdf3af63a4dd2389a5d9 to your computer and use it in GitHub Desktop.
Save miahmie/2b2c580c104cfdf3af63a4dd2389a5d9 to your computer and use it in GitHub Desktop.
会話時に1文字ずつ効果音を鳴らす
/**
* talkse : 会話時に1文字ずつ効果音を鳴らす
*
* 使い方
* Override.tjs で KAGLoadScript("talkse.tjs"); を行う
* tf.talkse の変数が登録されている場合にテキスト1文字表示時に効果音を鳴らす
* tf.talksebuf の変数を登録すると,任意のSEバッファを指定できる
* 下記のようなマクロを登録して [talkse storage=beep buf=0] などとして利用する良い
* [talkse storage=""] にすると機能が無効になる
; storage=効果音ファイル(""で停止) buf=効果音バッファ(省略時0)
[macro name="talkse"]
[eval exp="tf.talkse=mp.storage"]
[eval exp="tf.talksebuf=+mp.buf"]
[endmacro]
* 制限事項
* 文字の表示間隔が短く,対象の効果音の頭に無音がある場合は,うまく音が聞こえない場合あり
* [ch text="123456"] 等により複数の文字を一括で表示した場合の効果音は1回
*/
// 音を鳴らしたくない文字をここに列挙
var TalkSEIgnoreChar = "  、。「」『』";
// TalkSEIgnoreCharを辞書形式に変換
var TalkSEIgnoreCharMap = %[];
{
var map = TalkSEIgnoreCharMap;
var all = TalkSEIgnoreChar;
for (var i = 0, len = all.length; i < len; i++) map[all.charAt(i)] = true;
}
// 文字を鳴らしても良いか判定する
function CheckTalkSePlay(ch) {
if (ch == "") return;
// 瞬間表示では効果音を鳴らしたくない場合は下記を有効にする
// if (kag.actualChSpeed == 0) return;
// 音を鳴らす対象の文字かどうか
var map = TalkSEIgnoreCharMap;
var len = ch.length;
if (len == 1) return !map[ch]; // 1文字の場合は辞書をそのまま利用
// 複数文字の場合は1文字ずつチェック
for (var i = 0; i < len; i++) if (!map[ch.charAt(i)]) return true;
// 全部文字効果音対象外だった
return false;
}
// MessageLayer改造
with (MessageLayer) {
&.processCh_talkse = .processCh;
&.processCh = function (ch) {
// currentでしか音を鳴らさない
if (this === kag.current) {
// 効果音を鳴らすかどうか
var se = tf.talkse;
if (se != "" && CheckTalkSePlay(ch)) {
// 効果音オブジェクトを取得して鳴らす
var seobj = kag.se[+tf.talksebuf];
if (seobj) seobj.play(%[ storage:se ]);
}
}
return processCh_talkse(...);
} incontextof null;
}
@KimoriTama
Copy link

戸惑っていますが、どこから最新のバージョンがダウンロードできるのですか?

@miahmie
Copy link
Author

miahmie commented May 26, 2023

どれが最新かということでしたら,これが最新版となります。
この拡張機能のコード自体はこの1ファイルで完結しています。
詳細な説明テキストがありませんが,吉里吉里/KAG3相当の環境で,上記コード冒頭にあるコメント通りに使用してください。

何故これがgistに上がっているのかというと,twitterでの下記のやり取りに使ったからです。

https://twitter.com/miahmie/status/1299673282434613248

質問に答える形のサンプルコードのため,保守する意図などありません。
もし必要でしたら改造してご自由にお使いください。

@KimoriTama
Copy link

いえ、このファイルではなく、これを合わせて使うKAG3の最新バージョンです。github上の物はあまりにも古いですから。
他の人がつかってるシステムをみったら、かなり新しいバージョンを使って、TagTextConverterEx.tjs や UILoader.tjs も含めています。
それでも、RATInit.tjs 、convertMain.tjsなどが含まれていない不完全なバージョンです。 
心当たりがございますか?

@miahmie
Copy link
Author

miahmie commented May 27, 2023

上記 talkse.tjs は一般に公開されている古いKAG3のバージョンでも動作するはずです。

他の人がつかってるシステム

そちらをご使用の方にお問い合わせください。
もし市販されている吉里吉里製ゲームを unpack してお尋ねされているようでしたら,そのメーカーがKAGを独自拡張していて非公開の可能性があります。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment