hitomi/data/scenario/system/live2d.ks
2023-12-30 22:25:55 -06:00

387 lines
No EOL
12 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;============================================================
; Live2D x tyranoscript対応マクロ
;============================================================
; ライブラリ読込
[loadjs storage = "live2d/lib/live2d.min.js"]
[loadjs storage = "live2d/framework/Live2DFramework.js"]
[loadjs storage = "live2d/framework/PlatformManager.js"]
[loadjs storage = "live2d/framework/LAppLive2DManager.js"]
[loadjs storage = "live2d/Live2Dmodel.js"]
[loadjs storage = "live2d/Live2Dtyrano.js"]
[iscript]
;live2Dが初めての場合、初期化する
if(f.live2d_models == undefined){
f.live2d_models = {};
}
[endscript]
;------------------------------------------------------------
; キャンバスとLive2Dモデル生成
;------------------------------------------------------------
[macro name = "live2d_new"]
;*パラメータ1 : name 【必須】Live2DモデルID(一意なもの)
; パラメータ2 : left Live2Dモデルの横位置(Canvasの横位置)
; パラメータ3 : top Live2Dモデルの縦位置(Canvasの縦位置)
; パラメータ4 : width Live2Dモデルの横幅(Canvasの横幅)
; パラメータ5 : height Live2Dモデルの縦幅(Canvasの縦幅)
; パラメータ6 : zindex Live2Dモデルの奥行き(Canvasの奥行き)
; パラメータ7 : opacity Live2Dモデルの透明度0.0?1.0
; ぱらめーた  can_visible Live2Dモデルの表示、非表示制御
; パラメータ8 : glleft Canvas内のLive2Dモデル横位置(0.0?2.0ぐらい)
; パラメータ9 : gltop Canvas内のLive2Dモデル縦位置(0.0?2.0ぐらい)
; パラメータ10 : glscale Canvas内のLive2Dモデル拡大縮小サイズ(0.0?2.0ぐらい)
[iscript]
; optinal
if(mp.name ==null)console.error('nameは必須です');
if(mp.left == null)mp.left = 0;
if(mp.top == null)mp.top = 0;
if(mp.width == null)mp.width = TYRANO.kag.config.scWidth;
if(mp.height == null)mp.height = TYRANO.kag.config.scWidth;
if(mp.zindex == null)mp.zindex = 12;
if(mp.opacity == null)mp.opacity = 0.0;
if(mp.can_visible == null)mp.can_visible = false;
if(mp.glleft == null)mp.glleft = 0.0;
if(mp.gltop == null)mp.gltop = 0.0;
if(mp.glscale == null)mp.glscale = 1.0;
; Live2DのCanvas追加する親ID
parentID = 'tyrano_base';
; Canvasを生成し、Live2Dモデルを透明で表示[Live2Dtyrano.js]
TG.stat.is_strong_stop = true;
var complete_event = function(){
TG.stat.is_strong_stop = false;
TG.layer.showEventLayer();
TG.ftag.nextOrder();
};
live2d_new(
LIVE2D_MODEL[mp.name],
mp.name,
mp.left,
mp.top,
mp.width,
mp.height,
mp.zindex,
mp.opacity,
mp.can_visible,
Number(mp.glleft),
Number(mp.gltop),
Number(mp.glscale),
parentID,
complete_event);
[endscript]
[endmacro]
;------------------------------------------------------------
; Live2Dキャラの表示
;------------------------------------------------------------
[macro name = "live2d_show"]
;*パラメータ1 : name 【必須】Live2DモデルID(一意なもの)
;*パラメータ2 : time 切り替え時間
;*パラメータ3 : left 横位置
;*パラメータ4 : top 縦位置
;*パラメータ5 : scale 比率
[iscript]
; optinal
if(mp.name ==null)console.error('nameは必須です');
if(mp.time == null)mp.time = 1000;
if(mp.left == null)mp.left = 0;
if(mp.top == null)mp.top = 0;
if(mp.scale == null)mp.scale = 1;
TG.stat.is_strong_stop = true;
var complete_event = function(){
TG.stat.is_strong_stop = false;
TG.layer.showEventLayer();
TG.ftag.nextOrder();
};
; Live2Dモデルの表示[Live2Dtyrano.js]
live2d_show(mp.name, mp.time,mp.left,mp.top,mp.scale,complete_event);
[endscript]
[endmacro]
;------------------------------------------------------------
; Live2Dキャラの非表示
;------------------------------------------------------------
[macro name = "live2d_hide"]
;*パラメータ1 : name 【必須】Live2DモデルID(一意なもの)
;*パラメータ2 : time 切り替え時間
[iscript]
; optinal
if(mp.name ==null)console.error('nameは必須です');
if(mp.time == null)mp.time = 1000;
TG.stat.is_strong_stop = true;
var complete_event = function(){
TG.stat.is_strong_stop = false;
TG.layer.showEventLayer();
TG.ftag.nextOrder();
};
; Live2Dモデルの非表示[Live2Dtyrano.js]
live2d_hide(mp.name, mp.time,complete_event);
[endscript]
[endmacro]
;------------------------------------------------------------
; Live2Dキャラの透明度
;------------------------------------------------------------
[macro name = "live2d_opacity"]
;*パラメータ1 : name 【必須】Live2DモデルID(一意なもの)
;*パラメータ2 : opacity 【必須】透明度(0.01.0)
;*パラメータ3 : time 切り替え時間
[iscript]
; optinal
if(mp.name ==null)console.error('nameは必須です');
if(mp.opacity ==null)console.error('opacityは必須です');
if(mp.time == null)mp.time = 1000;
; Live2Dモデルの透明度[Live2Dtyrano.js]
live2d_opacity(mp.name, mp.opacity, mp.time);
[endscript]
[endmacro]
;------------------------------------------------------------
; Live2Dキャラのカラー
;------------------------------------------------------------
[macro name = "live2d_color"]
;*パラメータ1 : name 【必須】Live2DモデルID(一意なもの)
;*パラメータ2 : red 赤(0.01.0)
;*パラメータ3 : green 緑(0.01.0)
;*パラメータ4 : blue 青(0.01.0)
[iscript]
; optinal
if(mp.name ==null)console.error('nameは必須です');
if(mp.red == null)mp.red = 1.0;
if(mp.green == null)mp.green = 1.0;
if(mp.blue == null)mp.blue = 1.0;
; Live2Dモデルのカラー[Live2Dtyrano.js]
live2d_color(mp.name, mp.red, mp.green, mp.blue);
[endscript]
[endmacro]
;------------------------------------------------------------
; Live2Dキャラの退場
;------------------------------------------------------------
[macro name = "live2d_delete"]
;*パラメータ1 : name 【必須】Live2DモデルID(一意なもの)
[iscript]
; optinal
if(mp.name ==null)console.error('nameは必須です');
; Live2DのCanvas追加する親ID
parentID = 'tyrano_base';
; Live2Dモデル表示[Live2Dtyrano.js]
live2d_delete(mp.name, parentID);
[endscript]
[endmacro]
;------------------------------------------------------------
; Live2Dキャラのモーション再生
;------------------------------------------------------------
[macro name = "live2d_motion"]
;*パラメータ1 : name 【必須】Live2DモデルID(一意なもの)
;*パラメータ2 : filenm Live2Dモーションファイル名
; パラメータ3 : idle アイドリング有無
[iscript]
; optinal
if(mp.name ==null)console.error('nameは必須です');
;モーション番号を指定しない場合、モーションストップ
if(mp.filenm == null)mp.filenm = '';
if(mp.idle == null)mp.idle = '';
; Live2Dモデルのモーション再生[Live2Dtyrano.js]
Live2Dcanvas[mp.name].motionChange(mp.name, mp.filenm, mp.idle);
[endscript]
[endmacro]
;------------------------------------------------------------
; Live2Dキャラの表情モーション再生
;------------------------------------------------------------
[macro name = "live2d_expression"]
;*パラメータ1 : name 【必須】Live2DモデルID(一意なもの)
;*パラメータ2 : filenm Live2D表情モーションファイル名
[iscript]
; optinal
if(mp.name ==null)console.error('nameは必須です');
;表情モーション名を指定しない場合、モーションストップ
if(mp.filenm == null)mp.filenm = '';
; Live2Dモデルのモーション再生[Live2Dtyrano.js]
Live2Dcanvas[mp.name].expressionChange(mp.name, mp.filenm);
[endscript]
[endmacro]
;------------------------------------------------------------
; Live2Dキャラの移動
;------------------------------------------------------------
[macro name = "live2d_trans"]
;*パラメータ1 : name 【必須】Live2DモデルID(一意なもの)
;*パラメータ2 : left 【必須】X位置
;*パラメータ3 : top 【必須】Y位置
;*パラメータ4 : time 切り替え時間
[iscript]
; optinal
if(mp.name ==null)console.error('nameは必須です');
if(mp.left ==null)console.error('leftは必須です');
if(mp.top ==null)console.error('topは必須です');
if(mp.time == null)mp.time = 1000;
; Live2Dモデルの移動[Live2Dtyrano.js]
Live2Dcanvas[mp.name].transChange(mp.name,mp.left, mp.top, mp.time);
[endscript]
[endmacro]
;------------------------------------------------------------
; Live2Dキャラの回転
;------------------------------------------------------------
[macro name = "live2d_rotate"]
;*パラメータ1 : name 【必須】Live2DモデルID(一意なもの)
;*パラメータ2 : rotate 【必須】回転角度
;*パラメータ3 : time 切り替え時間
[iscript]
; optinal
if(mp.name ==null)console.error('nameは必須です');
if(mp.rotate ==null)console.error('rotateは必須です');
if(mp.time == null)mp.time = 1000;
; Live2Dモデルの回転[Live2Dtyrano.js]
Live2Dcanvas[mp.name].rotateChange(mp.name,mp.rotate, mp.time);
[endscript]
[endmacro]
;------------------------------------------------------------
; Live2Dキャラの拡大・縮小
;------------------------------------------------------------
[macro name = "live2d_scale"]
;*パラメータ1 : name 【必須】Live2DモデルID(一意なもの)
;*パラメータ2 : scaleX 【必須】Xスケール
;*パラメータ3 : scaleY 【必須】Yスケール
;*パラメータ4 : time 切り替え時間
[iscript]
; optinal
if(mp.name ==null)console.error('nameは必須です');
if(mp.scaleX ==null)console.error('scaleXは必須です');
if(mp.scaleY ==null)console.error('scaleYは必須です');
if(mp.time == null)mp.time = 1000;
; Live2Dモデルの移動[Live2Dtyrano.js]
Live2Dcanvas[mp.name].scaleChange(mp.scaleX, mp.scaleY, mp.time);
[endscript]
[endmacro]
;------------------------------------------------------------
; Live2Dキャラのシェイク
;------------------------------------------------------------
[macro name = "live2d_shake"]
;*パラメータ1 : name 【必須】Live2DモデルID(一意なもの)
[iscript]
; optinal
if(mp.name ==null)console.error('nameは必須です');
; キャラクターを揺らす[Live2Dtyrano.js]
Live2Dcanvas[mp.name].vibration();
[endscript]
[endmacro]
;------------------------------------------------------------
; Live2Dモデルの復元セーブ対応
;------------------------------------------------------------
[macro name = "live2d_restore"]
[iscript]
var live2d_models = TG.stat.f.live2d_models;
tf.i = 0;
tf.models = live2d_models;
tf.array_models = [];
var index=0;
for (var name in live2d_models){
live2d_models[name]["name"] = name;
tf.array_models[index] = live2d_models[name];
index++;
}
tf.cnt_model = tf.array_models.length;
[endscript]
*point
[iscript]
tf.model_name=tf.array_models[tf.i]["name"];
tf.model_left=tf.array_models[tf.i]["can_left"];
tf.model_top = tf.array_models[tf.i]["can_top"];
tf.model_glscale = tf.array_models[tf.i]["gl_scale"];
tf.model_scale = tf.array_models[tf.i]["scale"];
tf.model_visible = tf.array_models[tf.i]["can_visible"];
tf.model_width = tf.array_models[tf.i]["can_width"];
tf.model_height = tf.array_models[tf.i]["can_height"];
//モーションはアイドル指定の場合のみ
if(tf.array_models[tf.i]["motion"]){
tf.model_motion = tf.array_models[tf.i]["motion"];
}else{
tf.model_motion = "";
}
//表情指定
if(tf.array_models[tf.i]["expression"]){
tf.model_expression = tf.array_models[tf.i]["expression"];
}else{
tf.model_expression = "";
}
if(tf.array_models[tf.i]["rotate"]){
tf.model_rotate = tf.array_models[tf.i]["rotate"];
}else{
tf.model_rotate = 0;
}
tf.i++;
[endscript]
@live2d_new name=&tf.model_name width=&tf.model_width height=&tf.model_height glscale=&tf.model_glscale
[if exp="tf.model_rotate!=0"]
@live2d_rotate name=&tf.model_name rotate=&tf.model_rotate time="0"
[endif]
[if exp="tf.model_visible==true"]
@live2d_show name=&tf.model_name left=&tf.model_left top=&tf.model_top scale=&tf.model_scale
[endif]
[if exp="tf.model_motion!=''"]
@live2d_motion name=&tf.model_name filenm=&tf.model_motion idle="ON"
[endif]
[if exp="tf.model_expression!=''"]
@live2d_expression name=&tf.model_name filenm=&tf.model_expression
[endif]
[if exp="tf.i<tf.cnt_model"]
@jump target="point"
[endif]
[endmacro]