Created
August 29, 2020 11:35
-
-
Save miahmie/2b2c580c104cfdf3af63a4dd2389a5d9 to your computer and use it in GitHub Desktop.
会話時に1文字ずつ効果音を鳴らす
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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; | |
} |
いえ、このファイルではなく、これを合わせて使うKAG3の最新バージョンです。github上の物はあまりにも古いですから。
他の人がつかってるシステムをみったら、かなり新しいバージョンを使って、TagTextConverterEx.tjs や UILoader.tjs も含めています。
それでも、RATInit.tjs 、convertMain.tjsなどが含まれていない不完全なバージョンです。
心当たりがございますか?
上記 talkse.tjs は一般に公開されている古いKAG3のバージョンでも動作するはずです。
他の人がつかってるシステム
そちらをご使用の方にお問い合わせください。
もし市販されている吉里吉里製ゲームを unpack してお尋ねされているようでしたら,そのメーカーがKAGを独自拡張していて非公開の可能性があります。
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
どれが最新かということでしたら,これが最新版となります。
この拡張機能のコード自体はこの1ファイルで完結しています。
詳細な説明テキストがありませんが,吉里吉里/KAG3相当の環境で,上記コード冒頭にあるコメント通りに使用してください。
何故これがgistに上がっているのかというと,twitterでの下記のやり取りに使ったからです。
https://twitter.com/miahmie/status/1299673282434613248
質問に答える形のサンプルコードのため,保守する意図などありません。
もし必要でしたら改造してご自由にお使いください。