mako-ver/mako_patch/first.ks
2023-11-22 23:30:06 -06:00

3096 lines
229 KiB
Text
Raw Permalink 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.

*0
[wait time=50]
;---------------------------------------
;macro定義前に定義しなくちゃいけない変数類
;----------------------------------------
@iscript
if( sf.eftime_ratio === void ) sf.eftime_ratio = 1.0;
sf.type_alphamovie = 1; //0だとalphamovie,1だとlayerexbtoa と選択式にしようと思ったが、結局、alphamovieでは作ってないです
@endscript
@call storage="kumaki_macro.ks"
@call storage="time_p.ks"
@call storage="gfontword.ks"
@call storage="ruby.ks" target="*define_rubireplace"
@loadplugin module="wuvorbis.dll"
@loadplugin module="extrans.dll"
@call storage="onClickOutOfPrimaryLayer.ks"
@call storage="itazura.ks"
@if exp="sf.type_alphamovie==0"
@call storage="alphamovie.ks"
@endif
;↓*system_variable_initializeの下に移動
;@call storage="systembutton.ks"
;@call storage=ExtHistoryLayer.ks
;----------------------------------------
*system_variable_initialize
;システム起動時に一度だけ実行されます
;タイトル毎に初期化する必要がある変数はgame_variable_initializeに書いてください
;---------------------------------------
@iscript
//レイヤー番号の指定
sf.layerBackground = 0;
sf.layerMovie = 0;
sf.layerFace = 1;
sf.layerFace2 = 2;
sf.layerFace3 = 3;
sf.layerFace4 = 4;
sf.layerFace5 = 5;
sf.layerFilter = 6;
sf.layerFilter2 = 7;
sf.layerFilter3 = 8;
sf.layerSight = 9;
sf.layerActDecorate = 10; //アクションシーンの蔦
sf.layerMapHintRing = 11;
sf.layerActDecorate2 = 12; //アクションシーンの文字・文字飾り
sf.layerActDecorate3 = 13; //アクションシーンの文字・文字飾り
sf.layerActDecorate4 = 14; //アクションシーンの文字・文字飾り
sf.layerMapIcon0 = 15;
sf.layerMapIcon1 = 16;
sf.layerMapIcon2 = 17;
sf.layerMapIcon3 = 18;
sf.layerMapIcon4 = 19;
sf.layerSelection1 = 15; //選択肢
sf.layerSelection2 = 16;
sf.layerSelection3 = 17;
sf.layerSelection4 = 18;
sf.layerSelection5 = 19;
sf.layerTarget = 20;
sf.layerMapHint0 = 21;
sf.layerMapHint1 = 22;
sf.layerMapHint2 = 23;
sf.layerMapHint3 = 24;
sf.layerMapHint4 = 25;
sf.layerMapHint5 = 26;
sf.layerMapHint6 = 27;
sf.layerMapHint7 = 28;
sf.layerMessageBase = 29; //このmessageってのはclicknextとかの奴
sf.layerMessage = 30;
sf.layerCaption = 31;
sf.layerPause = 32;
sf.layerProgress = 33;
sf.layerMessageLayerFrame = 34;
//35,36,37は空き
sf.layerBlind = kag.fore.layers.count - 1; //38
sf.layerMission = sf.layerFace5;
//----------------------------------------
//facerシステム立ち絵合成
sf.useFacerSystem = false; //作品によって切り替えてください
//----------------------------------------
if(sf["gameCleared"]===void) sf["gameCleared"]=false; //←今回これはトゥルーエンドとして扱います。
if(sf["gameComplete"]===void) sf["gameComplete"]=false; //←これはコンプリートフラグ
tf['scenemode'] = false; //現在のゲームが「シーンモード」での再生であることを示すフラグ
//----------------------------------------
//メッセージウィンドウのモードです。f〜変数にも同じ物があります。こちらは最後に決定したモードを保持しておく変数です
sf.messagemode=1; //←これ要らないんじゃないの gamemode制にしたから
//今メッセージウィンドウに表示されてる文字数
tf.message_ch_count = 0;
//キャプション(字幕)表示速度
sf.caption_appear_time = 100;
sf.caption_leave_time = 100;
sf.window_appear_time = sf.caption_appear_time * 4; //メッセージウィンドウの場合
sf.window_leave_time = sf.caption_appear_time * 4;
//一時停止フラグ
f.pause = false; //今ポーズ中かどうか
kag.pauseMenuItem.enabled = false;
f.pause_waiting = false; //ポーズによって[l]待ちしている(解除時にキーイベントを発生させるためのフラグ)
//∞待ち
//sf.voice_add_wait_timeが∞
//つまり、time_lで待つのではなくlが使われる
//通常はfalse
if(sf.voice_add_wait_infinity===void) sf.voice_add_wait_infinity = false;
//----------------------------------------
//メニューにデータをセットする関数
function setMenuDataOption()
{
//スペースキーの扱い
sf.spacekeyaction_default = 0;
if(sf.spacekeyaction===void) sf.spacekeyaction = sf.spacekeyaction_default; //0:一時停止 1:文字送り
switch(sf.spacekeyaction){
case 0:
onSpacekey_2_MenuItemClick(kag.spacekey_2_MenuItem);break;
case 1:
onSpacekey_1_MenuItemClick(kag.spacekey_1_MenuItem);break;
}
//演出速度sf.eftime_ratioじたいはkumaki_macroの方で初期化してあります
sf.effectSpeedIndexDefault = 5;
sf.effectSpeedIndexMax = 8; //区分数の最大値 0-8
if(sf.effectSpeedIndex===void) sf.effectSpeedIndex=sf.effectSpeedIndexDefault;
//setEffectSpped()はoverride.tjsに
setEffectSpped(sf.effectSpeedIndex);
//ボイスの追加待ち時間(待ち時間に加算されます)
sf.voice_add_wait_index_default = 5;
sf.voice_add_wait_index_max = 12;
if( sf.voice_add_wait_index === void ) sf.voice_add_wait_index = sf.voice_add_wait_index_default;
setVoiceAddWait(sf.voice_add_wait_index);
//ムービーシーンの最後で止まる(false)か、最初から繰り返す(true)か
sf.loopanime_replaymode_default = 0;
if(sf.loopanime_replaymode===void) sf.loopanime_replaymode=sf.loopanime_replaymode_default;
switch(sf.loopanime_replaymode){
case 1:
kag.movieSceneLast_replay_MenuItem.checked=true;
break;
case 2:
kag.movieSceneLast_next_MenuItem.checked=true;
break;
default:
kag.movieSceneLast_wait_MenuItem.checked=true;
sf.loopanime_replaymode=0;
}
//ステイモードの待ち時間
sf.movieStayTimeIndexDefault = 2;
sf.movieStayTimeIndexMax = 7;
if( sf.movieStayTimeIndex === void ) sf.movieStayTimeIndex=sf.movieStayTimeIndexDefault;
//setMovieStayTime()はoverride.tjsに
setMovieStayTime(sf.movieStayTimeIndex);
//ノベルモード時のウィンドウの濃さ
sf.darkWindowOpacityIndexDefault = 4;
sf.darkWindowOpacityIndexMax = 8;
if(sf.darkWindowOpacityIndex===void) sf.darkWindowOpacityIndex=sf.darkWindowOpacityIndexDefault;
setDarkWindow(sf.darkWindowOpacityIndex);
//グラフィカルモードの時字幕を表示する
sf.captionview_default = true;
if(sf.captionview===void) sf.captionview=sf.captionview_default;
kag.captionUnshowMenuItem.checked=!sf.captionview;
//キャラ別字幕
if( sf.caption_enable === void ) sf.caption_enable = %[];
if( sf.caption_enable_default === void ) sf.caption_enable_default = %[];
sf.caption_enable_default['narr'] = true; //ナレ
if( sf.caption_enable['narr']===void ) sf.caption_enable['narr']=sf.caption_enable_default['narr'];
kag.captionChara_1_MenuItem.checked=sf.caption_enable['narr'];
sf.caption_enable_default['player'] = true; //主人公
if( sf.caption_enable['player']===void ) sf.caption_enable['player']=sf.caption_enable_default['player'];
kag.captionChara_2_MenuItem.checked=sf.caption_enable['player'];
sf.caption_enable_default['sinjo'] = true; //思考
if( sf.caption_enable['sinjo']===void ) sf.caption_enable['sinjo']=sf.caption_enable_default['sinjo']; //思考
kag.captionChara_3_MenuItem.checked=sf.caption_enable['sinjo'];
sf.caption_enable_default['mako'] = true; //マコ
if( sf.caption_enable['mako']===void ) sf.caption_enable['mako']=sf.caption_enable_default['mako']; //マコ
kag.captionChara_4_MenuItem.checked=sf.caption_enable['mako'];
sf.caption_enable_default['other'] = true; //その他
if( sf.caption_enable['other']===void ) sf.caption_enable['other']=sf.caption_enable_default['other']; //その他
kag.captionChara_5_MenuItem.checked=sf.caption_enable['other'];
//f.captionChara = ''; //今誰の字幕を表示しているのかを保持する変数←*game_variable_initializeに移動
//キャプション(字幕)の速度割合
//1.0 0.5 0.25 あたりで
sf.caption_time_index_default = 0;
sf.caption_time_index_max = 3;
if( sf.caption_time_index === void ) sf.caption_time_index = sf.caption_time_index_default;
setCaptionSpeed(sf.caption_time_index);
//ボイス無し字幕の待ち時間(文字1文字あたり)
sf.caption_char_wait_index_default = 6;
sf.caption_char_wait_index_max = 8;
if( sf.caption_char_wait_index === void ) sf.caption_char_wait_index = sf.caption_char_wait_index_default;
setCaptionWait(sf.caption_char_wait_index);
//表現レベル expression_levelの定義はexp/exp.ks
kag.expressionLevelMenuItem.visible=expression_level_changeenable;
kag.expressionLevelMenuItem.enabled=expression_level_changeenable;
if(expression_level_changeenable){
//変更可能であるならば、変数を優先
if(sf.expression_level===void) sf.expression_level=expression_level;
}
else{
//変更不可であるならば、デフォルト値で固定exp.xp3を追加した後戻した時の誤動作避け
sf.expression_level = expression_level;
}
if(sf.expression_level==0) kag.expressionLevel_0_MenuItem.checked=true;
else{
sf.expression_level = 1;
kag.expressionLevel_1_MenuItem.checked=true;
}
}
setMenuDataOption(); //データをメニューに反映
//メニューにデータをセットする関数サウンド編
function setMenuDataSoundOption()
{
//特定の効果音を鳴らすかどうか、[抽送音、ロープ、畳]
if( sf.sechoice === void ){
sf.sechoice = [true,true,true,true,true];
}
kag.seChoice_1_MenuItem.checked = sf.sechoice[0];
kag.seChoice_2_MenuItem.checked = sf.sechoice[1];
kag.seChoice_3_MenuItem.checked = sf.sechoice[2];
kag.seChoice_4_MenuItem.checked = sf.sechoice[3];
kag.seChoice_5_MenuItem.checked = sf.sechoice[4];
//ボイス
if( sf.ve_mako===void ) sf.ve_mako=true; //マコ
kag.voiceChara_1_MenuItem.checked=sf.ve_mako;
if( sf.ve_other===void ) sf.ve_other=true; //その他
kag.voiceChara_2_MenuItem.checked=sf.ve_other;
//20160729 次回に向けてのメモ
//voiceで有効判定を指定するのを忘れがちであるため、マクロに自動判定を組み込んだ方がいい
//その際、name指定子を使えるよう、ve名前 といった風にする
}
setMenuDataSoundOption();
//メニューのショートカットを有効に
setMenuShortcut(true);
//ムービー関係
//ムービーの種類に関して
//以前は一種類決め打ち、あるいはユーザーに指定してもらい、
//種類をsf.moviePlayTypeに保持していました
//今回からは、以下のように変更します
//-1:ムービーは使用しない
//0:オート判別(拡張子を一つずつ検索する)
//1: mpeg
//2: wmv
//3: avi
//4: その他
//1以上の場合はユーザー指定になります
//またcinemaマクロなどで、ストレージ名が決め打ち'mov.mpg'など拡張子を指定)だった場合は、この指定は無視されます
sf.moviePlayTypeDefault = 2; //←作品を作る毎に、この数値を指定してください
if( sf.moviePlayType===void ) sf.moviePlayType=sf.moviePlayTypeDefault;
sf.moviePlayTypeExtListList = [
['mpv','mpg','mpeg','wmv','avi'] //オート判別
,['mpv','mpg','mpeg'] //mpeg
,['wmv'] //wmv
,['avi'] //avi
,['']
];
function setMovieDefault()
{
//デフォに戻す関数
var chacking_filename = "title_movie"; //このファイル名に、拡張子を付けたファイルが存在するかで、メニューの表示が変わります
kag.movieMPEGMenuItem.enabled = Storages.isExistentStorage(chacking_filename+".mpg");
kag.movieMPEGMenuItem.visible = kag.movieMPEGMenuItem.enabled;
kag.movieMPEGMenuItem.checked = (sf.moviePlayType==1);
kag.movieWMVMenuItem.enabled = Storages.isExistentStorage(chacking_filename+".wmv");
kag.movieWMVMenuItem.visible = kag.movieWMVMenuItem.enabled;
kag.movieWMVMenuItem.checked = (sf.moviePlayType==2);
kag.movieAVIMenuItem.enabled = Storages.isExistentStorage(chacking_filename+".avi");
kag.movieAVIMenuItem.visible = kag.movieAVIMenuItem.enabled;
kag.movieAVIMenuItem.checked = (sf.moviePlayType==3);
if( sf.moviePlayType==1 && !kag.movieMPEGMenuItem.enabled ) sf.moviePlayType=2;
if( sf.moviePlayType==2 && !kag.movieWMVMenuItem.enabled ) sf.moviePlayType=3;
if( sf.moviePlayType==3 && !kag.movieAVIMenuItem.enabled ) sf.moviePlayType=0;
var moviemenuvisiblecount = 0;
if(kag.movieMPEGMenuItem.enabled) moviemenuvisiblecount++;
if(kag.movieWMVMenuItem.enabled) moviemenuvisiblecount++;
if(kag.movieAVIMenuItem.enabled) moviemenuvisiblecount++;
kag.movieMenu.visible=(moviemenuvisiblecount>1)? true:false;
}
setMovieDefault();
//デフォルト設定ここまで
//↓今回は使いません
//ボイスブレイク機能(文章を送ったらボイスを停止するあれ)
//if( sf.voiceBreaker === void ) sf.voiceBreaker = false;
//kag.voiceBreakerMenuItem.checked = sf.voiceBreaker;
//エッチシーンにBGMを鳴らす(&H)
if( sf.HsceneBGMPlaying === void ) sf.HsceneBGMPlaying=true;
if(typeof kag.hsceneBGMUnplayingMenuItem != "undefined") kag.hsceneBGMUnplayingMenuItem.checked = !sf.HsceneBGMPlaying;
kag.hsceneBGMUnplayingMenuItem.visible=false; //←今回コレ非表示で
//ループアニメから抜けるためのエスケープ関数
f.escape_script = void;
f.escape_label = void;
function escapeProc_keyhook(key,shift)
{
if(key==VK_RETURN || key==VK_SPACE){
return escapeProc_lclickhook();
}
return false;
}
function escapeProc_lclickhook()
{
if(f.pause) return false; //ポーズ中は無効
if(f.escape_label!==void&&f.escape_label!==void)
{
escapeProcReset();
kag.process(f.escape_script,f.escape_label);
return true;
}
return false;
}
function escapeProcSet(scriptname,labelname)
{
f.escape_script = scriptname;
f.escape_label = labelname;
kag.leftClickHook.add(escapeProc_lclickhook);
// kag.rightClickHook.add(escapeProc);
kag.keyDownHook.add(escapeProc_keyhook);
}
function escapeProcReset()
{
kag.leftClickHook.remove(escapeProc_lclickhook);
// kag.rightClickHook.remove(escapeProc);
kag.keyDownHook.remove(escapeProc_keyhook);
}
//画像アニメを再生する(メモリ不足で落ちる場合はオフに)今回は使いません
//if( sf.enableImageAnim === void ) sf.enableImageAnim = true;
//kag.imageAnimMenuItem.checked = sf.enableImageAnim;
//地震 quakeは削除しました20150308
//if( sf.quake_enabled === void ) sf.quake_enabled = true;←macroの方に移動
// kag.quakeEnableMenuItem.checked = sf.quake_enabled;
//gamemode
f.gamemode = 'cinema';
//自動的にメッセージウィンドウを表示する変数
f.ch_frame_autoview_enabled=true;
//マップ用
//マップ関係はitazura.ksに
//前のシーンへ、シーンをやり直す、次のシーンへ これら用のフラグ
f.parag_prev = "";
f.parag_current = "";
f.parag_next = "";
f.parag_storage = "";
//*シーンジャンプ用変数
tf.scenejump_storage='';
tf.scenejump_target='';
tf.scenejump_rule='';
//グラフィカルフォント字幕システムを使用するか
sf.use_graphicalword = true;
//gdiplusを使ってdrawtextするか
//if(sf.useGDIPlus_drawText===void) sf.useGDIPlus_drawText=false;
sf.useGDIPlus_drawText=false;//正直使わない方が無難(画面汚くなる…)
//Plugins.link('layerExDraw.dll'); ←gdi使う場合ね
//talk用se保持変数gfontの影響でendtalkで字幕表示させなくちゃいけない都合により、talkで指定するvoiceを、endtalkで慣らさなければならないため
f.talk = %[];
//----------------------------------------
//選択肢サウンド
sf.selection_sound_onmouse = 'seCursorコキッコミカル';
sf.selection_sound_click = 'se決定ポピンコミカル';
//GraphicalFontWord
obj_gfontword.casting('マコ').init('font1#',65,-2,-25,-3,#' ');
obj_gfontword.casting('主人公').init('font2#',65,-3,-25,-4,#' ');
obj_gfontword.casting('思考').init('font3#',65,-4,-25,void,#' ');
obj_gfontword.casting('地の文').init('font4#',65,-4,-25,void,#' ');
obj_gfontword.casting('other').init('font5#',65,-2,-25,void,#' ');
//エッチシーン
//今回はエッチシーンが分岐するので特殊です
if( sf.h_scene === void ){
sf.h_scene = [
/*h00*/[0],
/*h01*/[0,0,0], //のぼり棒
/*h02*/[0,0], //木馬
/*h03*/[0,0], //木陰
/*h04*/[0,0], //砂場
/*h05*/[0], //シーソー
/*h06*/[0,0], //ルートBが前 ブランコ
/*h07*/[0], //ジャングルジム
/*h08*/[0,0], //鉄棒
/*h09*/[0,0], //滑り台
/*h10*/[0],
/*h11*/[0,0,0,0],
/*h12*/[0,0,0,0],
/*h13*/[0,0,0,0],
/*h14*/[0,0,0,0,0,0,0],
/*h15*/[0,0,0,0,0],
/*h16*/[0],
];
}
//append用修正処理
if(sf.h_scene[16].count<3){
sf.h_scene[16][1] = 0;
sf.h_scene[16][2] = 0;
}
//append1用修正処理
if(sf.h_scene[17]===void){
sf.h_scene[17] = [0,0,0,0,0,0,0,0,0];
}
//初体験発生条件用
// 0 1 2 3 4 5 6 7 8 9
//if(sf.h_scene_sex===void) sf.h_scene_sex = [0,0,0,0,0,0,0,0,0,0]; ←これなくそうと思う
// if(sf.sex_virgin===void) sf.sex_virgin = true; //セックスしたらfalse
// ↑statusフラグで管理します
function check初体験発生条件()
{
var v = 0;
/*
/*h01*/[0,0,0], //のぼり棒
/*h02*/[0,0], //木馬
/*h03*/[0,0], //木陰
/*h04*/[0,0], //砂場
/*h05*/[0], //シーソー
/*h06*/[0,0], //ルートBが前 ブランコ
/*h07*/[0], //ジャングルジム
/*h08*/[0,0], //鉄棒
/*h09*/[0,0], //滑り台
*/
if(sf.h_scene[1][0]||sf.h_scene[1][2]) v++; //のぼり棒
if(sf.h_scene[2][0]||sf.h_scene[2][1]) v++; //木馬
if(sf.h_scene[3][0]||sf.h_scene[3][1]) v++; //丘
if(sf.h_scene[4][0]||sf.h_scene[4][1]) v++; //砂場
if(sf.h_scene[5][0]) v++; //シーソー
if(sf.h_scene[6][0]||sf.h_scene[6][1]) v++; //ブランコ
if(sf.h_scene[7][0]) v++; //ジャングルジム
if(sf.h_scene[8][0]||sf.h_scene[8][1]) v++; //鉄棒
//sf.h_scene[9][0]は初体験前に絶対通る
if(sf.h_scene[9][1]) v++; //滑り台
if(v>=4) return true;
return false;
}
function checkトゥルーエンド発生条件()
{
var v = 0;
//if(sf.h_scene[11][2] || sf.h_scene[11][3]) v++;
if(sf.h_scene[12][2] || sf.h_scene[12][3]) v++;
if(sf.h_scene[13][2] || sf.h_scene[13][3]) v++;
if(sf.h_scene[14][1] || sf.h_scene[14][2] || sf.h_scene[14][4] || sf.h_scene[14][5]) v++;
if(sf.h_scene[15][0] || sf.h_scene[15][1] || sf.h_scene[15][2] || sf.h_scene[15][3]) v++;
if(v>=4) return true;
return false;
}
function checkコンプリート発生条件()
{
var judge = 0;
var v = 0;
for( var i=0 ; i<16 ; i++ ){
judge += sf.h_scene[i].count;
for( var j=0 ; j<sf.h_scene[i].count ; j++ ){
if(sf.h_scene[i][j]>0) v++;
}
}
if(v>=judge) return true;
return false;
}
//----------------------------------------
//今回の特殊要素
//ゲームスタイル 0:story 1:cinema 2:actual
sf.gameStyle_default = 0;
if( sf.gameStyle === void ) sf.gameStyle = sf.gameStyle_default;
switch(sf.gameStyle){
case 1:
kag.gvGameStyleCinemaMenuItem.checked = true;
break;
case 2:
kag.gvGameStyleActualMenuItem.checked = true;
break;
default:
kag.gvGameStyleStoryMenuItem.checked = true;
}
//あなたの性傾向(&S) 0:フィクション -1:アンチ 1:ペドフィル
sf.loliconStyle_default = 0;
if( sf.loliconStyle === void ) sf.loliconStyle = sf.loliconStyle_default;
if(sf.loliconStyle==0) kag.gvLoliconStyleFictionMenuItem.checked = true;
if(sf.loliconStyle<0) kag.gvLoliconStyleAntiMenuItem.checked = true;
if(sf.loliconStyle>0) kag.gvLoliconStylePedophileMenuItem.checked = true;
//名字名前年齢
sf.名字default = 'Shijiri';
if( sf.名字 === void ) sf.名字 = "";
sf.名前default = 'Shiro';
if( sf.名前 === void ) sf.名前 = "";
sf.年齢default = +40;
if( sf.年齢 === void ) sf.年齢 = "";
//まわりを見る背景で使った数値
tf.currentまわりを見る番号 = void;
tf.prevまわりを見る番号 = void;
//スマホ演出用
f.スマホ位置x1 = void;
f.スマホ位置y1 = void;
f.スマホ位置x2 = void;
f.スマホ位置y2 = void;
f.スマホ位置mx1 = void;
f.スマホ位置my1 = void;
f.スマホ位置mx2 = void;
f.スマホ位置my2 = void;
f.スマホマーク = void;
f.スマホフレーム = void;
f.スマホスクリーン = void;
f.スマホカメラ = void;
f.スマホビデオ = void;
f.スマホ録画中 = void;
f.スマホタイプ = void;
//アイコンボタン登録変数・関数
tf.iconbuttonlist = [];
class IconButton
{
var name;
var x,y,pos;
var layer_index = -1;
function IconButton(_name,_pos){
name=_name;
pos=_pos;
var a = pos.split("(,)",,true);
x = +a[0];
y = +a[1];
}
}
/*
"(20,20)(220,20)(220,220)(20,220)" //左上
,"(20,500)(220,500)(220,700)(20,700)" //左下
,"(1060,500)(1260,500)(1260,700)(1060,700)" //右下
,"(20,240)(220,240)(220,440)(20,440)" //左上真下
,"(240,500)(440,500)(440,700)(240,700)" //左下右隣
,"(1060,280)(1260,280)(1260,480)(1060,480)" //右下真上
*/
function regIconButton(name){
var pos = [
"(20,600)(120,600)(120,700)(20,700)" //左下
,"(20,480)(120,480)(120,580)(20,580)"
,"(20,360)(120,360)(120,460)(20,460)"
,"(20,240)(120,240)(120,340)(20,340)"
,"(20,120)(120,120)(120,220)(20,220)"
,"(20,0)(120,0)(120,100)(20,100)"
];
var i = new IconButton(name,pos[tf.iconbuttonlist.count]);
tf.iconbuttonlist.add(i);
return i.pos;
}
var optionSystem = new kodomoSystemOption(global.kag);
var optionSound = new kodomoSoundOption(global.kag);
@endscript
;↓setMenuShortcutを先に実行する必要があるのでここに
@call storage="systembutton.ks"
;---------------------------------------
*macro_define
;---------------------------------------
;stable
; 履歴、オプションなどを受付可・不可にします
;---------------------------------------
@iscript
f.stable_status = false;
function macro_stable(status)
{
f.stable_status = status;
kag.tagHandlers.history(%[enabled:status]);
kag.systemOptionMenuItem.enabled = status;
kag.soundOptionMenuItem.enabled = status;
if(typeof global.systembutton_object != 'undefined'){
systembutton_object.setOptions(%[forevisible:status,backvisible:status]);
}
}
@endscript
@macro name=stable
@eval exp="macro_stable(mp.status)"
@endmacro
;---------------------------------------
;section
; ラベルの直後においてください
;---------------------------------------
@macro name=section
@mapdisable layer=base page=fore
@mapdisable layer=base page=back
;@eval exp="mp.cancelskip=true" cond="mp.cancelskip===void"
@cancelskip
;@eval exp="mp.cancelautomode=true" cond="mp.cancelautomode===void"
@cancelautomode
;@eval exp="f.scene_counter++"
;@save place=0 ask=false
;[ch txt="----------------------------------------"][r][ch txt="■"]
;@emb exp="Scripts.eval(kag.currentPageName)"
;[r][ch txt="----------------------------------------"][r]
[r]
;@startanchor enabled=true
@clickskip enabled=true
@nextskip enabled=false
@automode enabled=false
@store enabled=false
@stable status=false
@rclick call=true storage="first.ks" target="*rclick" enabled=true
@layfree
@eval exp="f.captionChara=''"
@cm
@if exp="debugmode"
@eval exp="kag.caption=@'シナリオ:【${kag.mainConductor.curStorage}】 位置:【${kag.currentLabel}】 演出速度:${sf.effectSpeedIndex}(${sf.effectSpeedIndexDefault}が普通)'"
@endif
@eval exp="obj_gfontword.exit()"
@endmacro
;---------------------------------------
;window メッセージウィンドウ表示
;@window (visible=bool) (time=msec) (method="method")
; visible:true/false
; time:表示時間(ミリ秒)
; method:トランジションメソッド
;---------------------------------------
@macro name=window
;@eval exp="if(mp.visible===void) mp['visible']=!kag.fore.messages[0].visible"
@if exp="((int)mp.visible)!=kag.fore.messages[0].visible||mp.layer!==void"
@eval exp="mp.clear=true" cond="mp.clear===void"
@if exp="mp.clear"
@if exp="!kag.fore.messages[0].visible"
@resetstyle
@resetfont
@er
@endif
@endif
@if exp="f.gamemode=='novel'"
@if exp="!kag.fore.messages[0].visible"
@image layer=&sf.layerMessageLayerFrame page=fore visible=true opacity=0 top=0 left=0 mode=alpha storage="sysMessageNovel"
@layopt layer=&sf.layerMessageLayerFrame page=fore autohide=true
@endif
@endif
@if exp="f.gamemode=='adv'"
@if exp="!kag.fore.messages[0].visible"
@image layer=&sf.layerMessageLayerFrame page=fore visible=true opacity=0 top=600 left=0 mode=alpha storage="sysMessageAdv"
@layopt layer=&sf.layerMessageLayerFrame page=fore autohide=true
@endif
@endif
@layopt layer=%layer|message0 page=fore visible=true opacity=&"((int)mp.visible)? 0:255"
@eval exp="mp.time=500" cond="mp.time===void"
@eval exp="mp.time=eftime(mp.time)" cond="mp.絶対時間!==true"
@zmove layer=message0 page=fore time=%time path=&"'(%d,%d,%d)'.sprintf(kag.fore.messages[0].left,kag.fore.messages[0].top,((int)mp.visible)? 255:0)"
@if exp="f.gamemode=='novel'"
@zmove layer=&sf.layerMessageLayerFrame page=fore time=%time path=&"'(0,0,%d)'.sprintf(((int)mp.visible)? getDarkWindowOpacity(+sf.darkWindowOpacityIndex):0)"
@endif
@if exp="f.gamemode=='adv'"
@zmove layer=&sf.layerMessageLayerFrame page=fore time=%time path=&"'(0,600,%d)'.sprintf(((int)mp.visible)? getDarkWindowOpacity(+sf.darkWindowOpacityIndex):0)"
@endif
@wm canskip=true
@wm canskip=true
@layopt layer=%layer|message0 page=fore visible=false opacity=255 cond="(int)mp.visible==0"
@rclick call=false jump=false enabled=%visible name=default
@endif
@endmacro
;---------------------------------------
;//=====================================
;場面終了処理
;@場面終了処理 time=2000 white=true rule=ruleimage
; bgmcontinue=true : bgmはそのまま継続する
;//=====================================
@macro name=画面無力化
@eval exp="obj_timerp.stop()"
@locklink
@mapdisable layer=base page=fore
@mapdisable layer=base page=back
@eval exp="itaz.enabled = false"
@eval exp="itaz.end()"
@eval exp="itaz.clear()"
@stopmove
@stoptrans
@eval exp="escapeProcReset()"
;@endcinema
;@eval exp="tf['scenemode'] = false"←←バカ!これ入れたらダメだろ!!
;@eval exp="if( zoom_object.moving ) zoom_object.finish()"
;@eval exp="if( zooma_object.moving ) zooma_object.finish()"
@stopzoom
@endindent
@endhact
;@endnowait←なんかエラー出る時がある
@cm
@stable status=false
;↓今回だけ特別
@eval exp="kag.fore.base.internalMouseMove=tf.internalMouseMove_fore"
@eval exp="kag.back.base.internalMouseMove=tf.internalMouseMove_back"
@いたずら終了
@eval exp="tf.iconbuttonlist.clear()"
@eval exp="obj_gfontword.exit()" cond="obj_gfontword!==void"
@eval exp="delayExec.stop()"
@endmacro
;----------------------------------------
;忘れずに保持
@eval exp="tf.internalMouseMove_fore = kag.fore.base.internalMouseMove"
@eval exp="tf.internalMouseMove_back = kag.back.base.internalMouseMove"
;----------------------------------------
@macro name=場面終了処理
@画面無力化
@eval exp="f.captionChara=''"
;@window visible=false
@eval exp="kumaRestoreVolume()"
@eval exp="mp.bgm=!mp.bgmcontinue"
@allsoundfadeout voice=false bgm=%bgm time=%time|2000
@if exp="mp.white"
@if exp="mp.rule!==void"
@whiteout time=%time|2000 canskip=true rule=%rule forced=true storage=%storage
@else
@whiteout time=%time|2000 canskip=true forced=true storage=%storage
@endif
@else
@if exp="mp.rule!==void"
@fadeout time=%time|2000 rule=%rule forced=true storage=%storage
@else
@fadeout time=%time|2000 forced=true storage=%storage
@endif
@endif
@wallsoundfadeout voice=false bgm=%bgm
@eval exp="f.bgm_h_flag=false"
@cm
;video関係の処理はfadeout/whiteoutに仕込んであります
;↓思い出殺し
@eval exp="f.recollect_enabled=false"
@eval exp="tf.historyOnlyTextOut=false"
;↓specialバッファへの関連づけ。どこかでクリアしとかないとバグの温床になりがちなので
@soundspecialrelateclear
@endmacro
;---------------------------------------
;bgm_h Hシーン用BGM bgmマクロラッパーマクロ
;@bgm_h
;----------------------------------------
@macro name=bgm_h
@eval exp="f.bgm_h_flag=true"
@eval exp="f.hscene_bgm=mp.storage"
@if exp="sf.HsceneBGMPlaying"
@bgm *
@endif
@endmacro
;---------------------------------------
;clickescape
;@clickescape script="aaa.ks" label="*label"
;---------------------------------------
@macro name=clickescape
@eval exp="escapeProcSet(mp.script,mp.label)"
@endmacro
@macro name=clickescapeend
@eval exp="escapeProcReset()"
;↓念のためこれも入れておきます staysceneend書き忘れ防止用
@eval exp="f.loopend_waiting=false"
@endmacro
;---------------------------------------
;@talk
; se=storage se_=storage quake=1-5(vmax=n*10,time=n*100)
;----------------------------------------
@macro name=talk
@eval exp="mp.captionvisible=true" cond="mp.captionvisible===void"
@eval exp="f.captionviewed=mp.captionvisible&&sf.captionview"
@eval exp="f.captionviewed=true" cond="mp.caption_force"
@eval exp="mp.vpos='bottom'" cond="mp.vpos===void"
;↓gfontはendtalkで作動するため保持しておきます
@eval exp="f.talk.vpos = mp.vpos"
@eval exp="mp.time=&sf.caption_appear_time" cond="mp.time===void"
@eval exp="mp.time*=+mp.timeratio" cond="mp.timeratio!==void"
@ignore exp="mp.絶対時間"
@eval exp="mp.time= +mp.time * +sf.caption_time_ratio"
@eval exp="mp.time=eftime(mp.time)"
@endignore
;gfont,endtalk用に一時保存
@eval exp="tf.caption_appear_time=mp.time"
@if exp="f.gamemode=='adv'"
; advモードのときメッセージウィンドウが表示されてなければ表示するよ
@ignore exp="kag.fore.messages[0].visible"
@window visible=true time=&sf.caption_appear_time
@endignore
@endif
@eval exp="mp.notext=false" cond="mp.notext===void"
@eval exp="mp.indent_enabled=true" cond="mp.indent_enabled===void"
@ignore exp="mp.notext"
@ignore exp="f.gamemode=='novel'"
; novelモード以外のときに名前prefix表示
[emb exp="mp.prefix"]
@endignore
; [emb exp="mp.bracket"][indent cond="mp.indent_enabled"]
@endignore
@if exp="f.gamemode=='cinema'||f.gamemode=='cinemadv'"
; グラフィカルモード
@if exp="kag.fore.messages[0].visible"
@window visible=false time=0
@endif
@if exp="sf.use_graphicalword"
@nowait
@image layer=&sf.layerCaption page=fore storage="sysBackTrans" visible=&f.captionviewed opacity=0 left=0 top=720
@image layer=&sf.layerCaption page=back storage="sysBackTrans" visible=&f.captionviewed opacity=0 left=0 top=720
@else
; ここから下はグラフィカルフォントを使わない場合(一枚絵の字幕を出す場合)
; ↓画面変更用に一応読み込んでおきます
@zimage layer=&sf.layerCaption page=fore storage=%storage visible=&f.captionviewed opacity=0 left=0 top=720
@zimage layer=&sf.layerCaption page=back storage=%storage visible=&f.captionviewed opacity=0 left=0 top=720
; @history enabled=true //まだ文字が表示されてないのにここでtrueにしたらダメじゃね
@zimage layer=&sf.layerProgress page=fore storage="sysProgressBar" visible=true opacity=255 left=0 top=-2
@zimage layer=&sf.layerProgress page=back storage="sysProgressBar" visible=true opacity=255 left=0 top=-2
; ;↓ヒストリーレイヤー用に改行
; @r
; ;↓ヒストリーレイヤー用にすぐ消去
; @cm
; ポーズをリセット
@eval exp="pauseSet(false)"
; ポーズを有効に
@eval exp="kag.pauseMenuItem.enabled=true"
@eval exp="mp.nocaption=false" cond="mp.nocaption===void"
@eval exp="f.talk.nocaption=mp.nocaption"
@ignore exp="mp.nocaption"
@eval exp="switch(mp.vpos){ case 'top':mp.top=0;break; case 'middle':mp.top=(720-kag.fore.layers[sf.layerCaption].height)\2;break; case 'bottom':mp.top=720-kag.fore.layers[sf.layerCaption].height;break;}"
@if exp="mp.type=='zoom'"
@zwt canskip=true
@zoom layer=&sf.layerCaption time=%time storage=%storage src=&"'%d,%d,%d,%d,%d'.sprintf((1280-(kag.fore.layers[sf.layerCaption].width*2))\2,+mp.top,kag.fore.layers[sf.layerCaption].width*2,kag.fore.layers[sf.layerCaption].height*2,0)" dest=&"'%d,%d,%d,%d,%d'.sprintf(1280-kag.fore.layers[sf.layerCaption].width,+mp.top,kag.fore.layers[sf.layerCaption].width,kag.fore.layers[sf.layerCaption].height,(f.captionviewed)? 255:0)"
@wzoom canskip=true
@else
; 720のところをinnerHeightとかやったらフルスクリーンでバグった そうだ 数値決め打ちじゃないとずれるんだ
@zmove layer=&sf.layerCaption page=fore time=%time path=&"'(0,%d,%d)'.sprintf(+mp.top),255)"
@zmove layer=&sf.layerCaption page=back time=%time path=&"'(0,%d,%d)'.sprintf(+mp.top),255)"
@zmove layer=&sf.layerProgress page=fore time=%time path="(0,0,255)"
@zmove layer=&sf.layerProgress page=back time=%time path="(0,0,255)"
@wm canskip=true
@wm canskip=true
@wm canskip=true
@wm canskip=true
@endif
@endignore
@nowait
@endif
@endif
@eval exp="mp.hact=!mp.notext" cond="mp.hact===void"
@eval exp="mp.voiceplay=true" cond="mp.voiceplay===void"
@if exp="sf.use_graphicalword"
@eval exp="f.talk.storage=mp.storage" cond="mp.storage!==void"
@eval exp="f.talk.se=mp.se" cond="mp.se!==void"
@eval exp="f.talk.se_=mp.se_" cond="mp.se_!==void"
@eval exp="f.talk.hact=mp.hact"
@eval exp="f.talk.voiceplay=mp.voiceplay"
@eval exp="f.talk.voiceenable=mp.voiceenable"
@eval exp="f.talk.name=mp.name"
; @eval exp="f.talk.quake=mp.quake"quakeは削除しました20150308
@if exp="mp.voiceplay"
; hactはここでやらないとまずい
@hact exp="&'kag.se[sf.sebuf_voice].play(%[storage:\''+mp.storage+'\'])'" cond="mp.hact&&mp.storage!==void"
@endif
@else
; ここから下はグラフィカルフォントを使わない場合(一枚絵の字幕を出す場合)
@talk_sound *
@endif
@endmacro
;----------
;音部分を小分けtalkとendtalk両方から使えるように
@macro name="talk_sound"
@sound storage=%se cond="mp.se!==void"
@sound_ storage=%se_ cond="mp.se_!==void"
;ファイル無いときのためにf.voice_totaltimeを0に設定しておくこれが0だったらファイルがないと判断するため
@eval exp="f.voice_totaltime=0"
@eval exp="mp.hact=true" cond="mp.hact===void"
@if exp="mp.voiceplay"
@if exp="mp.voiceenable"
@voice storage=%storage hact=%hact name=%name cond="mp.storage!==void"
@else
@hact exp="&'kag.se[sf.sebuf_voice].play(%[storage:\''+mp.storage+'\'])'" cond="mp.hact&&mp.storage!==void"
; ボイス待ち時間はとりあえず0に設定してendtalkの方で対処
@endif
@endif
@eval exp="f.voice_playing_tickcount=System.getTickCount()"
; @quake time=&"(+mp.quake)*100" hmax=0 vmax=&"(+mp.quake)*10" cond="sf.quake_enabled"quakeは削除しました20150308
@endmacro
;----------------------------------------
;gfontも小分けしますendtalkの前に動画処理を入れたいからです
@macro name=endtalk_gfont
;endtalkは分けます。gfont処理がendtalk_gfont、従来のendtalkがendtalkです
;↓↓↓gfont用talk処理ここからgfontは文字データがないと動かせないので、字幕表示処理がendtalkに来ます
@if exp="sf.use_graphicalword"
@if exp="f.gamemode=='cinema'||f.gamemode=='cinemadv'"
; ポーズをリセット
@eval exp="pauseSet(false)"
; ポーズを有効に
@eval exp="kag.pauseMenuItem.enabled=true"
@ignore exp="f.talk.nocaption"
@グラフィカルフォント:台詞描画 layer=&"sf.layerCaption" page=%page|fore
@zbacklay layer=&sf.layerCaption
@eval exp="switch(f.talk.vpos){ case 'top':mp.top=0;break; case 'middle':mp.top=(720-kag.fore.layers[sf.layerCaption].height)\2;break; case 'bottom':mp.top=720-kag.fore.layers[sf.layerCaption].height;break;}"
@layopt layer=&sf.layerCaption page=fore opacity=0 visible=&f.captionviewed top=&"+mp.top+kag.fore.layers[sf.layerCaption].height"
@layopt layer=&sf.layerCaption page=back opacity=0 visible=&f.captionviewed top=&"+mp.top+kag.fore.layers[sf.layerCaption].height"
@zimage layer=&sf.layerProgress page=fore storage="sysProgressBar" visible=true opacity=255 left=0 top=0
@zimage layer=&sf.layerProgress page=back storage="sysProgressBar" visible=true opacity=255 left=0 top=0
; 720のところをinnerHeightとかやったらフルスクリーンでバグった そうだ 数値決め打ちじゃないとずれるんだ
@zmove layer=&sf.layerCaption page=fore time=&tf.caption_appear_time path=&"'(0,%d,%d)'.sprintf(+mp.top,255)"
@zmove layer=&sf.layerCaption page=back time=&tf.caption_appear_time path=&"'(0,%d,%d)'.sprintf(+mp.top,255)"
@zmove layer=&sf.layerProgress page=fore time=&tf.caption_appear_time path="(0,0,255)"
@zmove layer=&sf.layerProgress page=back time=&tf.caption_appear_time path="(0,0,255)"
@wm canskip=true
@wm canskip=true
@wm canskip=true
@wm canskip=true
@endignore
@endif
; @talk_sound storage=&f.talk.storage se=&f.talk.se se_=&f.talk.se_ hact=false voiceplay=&f.talk.voiceplay voiceenable=&f.talk.voiceenable name=&f.talk.name quake=&f.talk.quake
;quakeは削除しました20150308
@talk_sound storage=&f.talk.storage se=&f.talk.se se_=&f.talk.se_ hact=false voiceplay=&f.talk.voiceplay voiceenable=&f.talk.voiceenable name=&f.talk.name
@eval exp="(Dictionary.clear incontextof f.talk)()"
@endif
;↑↑↑gfont用talk処理ここまで
@endmacro
;----------------------------------------
@macro name=endtalk
@eval exp="mp.time=&sf.caption_leave_time" cond="mp.time===void"
@eval exp="mp.time*=+mp.timeratio" cond="mp.timeratio!==void"
@ignore exp="mp.絶対時間"
@eval exp="mp.time= +mp.time * +sf.caption_time_ratio"
@eval exp="mp.time=eftime(mp.time)"
@endignore
@eval exp="mp.stable=true" cond="mp.stable===void"
@eval exp="mp.notext=false" cond="mp.notext===void"
@ignore exp="mp.notext"
@endhact
@endindent
; @emb exp="mp.bracket"
@endignore
@if exp="f.gamemode=='adv'"
@stable status=true cond="mp.stable"
@p
@stable status=false cond="mp.stable"
@cm
@elsif exp="f.gamemode=='cinema'||f.gamemode=='cinemadv'"
; @if exp="kag.historyLayer.visible"
; @eval exp="kag.historyLayer.dispInit()"
; @endif
@endnowait
@if exp="f.voice_totaltime==0"
; ボイス無い時用
@if exp="f.captionviewed"
; キャプションが表示されてるときは待つよ
; あと前まではkag.fore.messages[0].ch_call_count使ってたけど、なんかの条件で上手く動作しないので、kagにmessageTextLengthというのを仕掛けてこちらを使うことにした 20150312
; @eval exp="f.voice_totaltime=kag.fore.messages[0].ch_call_count*sf.caption_char_wait_time"
@eval exp="f.voice_totaltime=kag.messageTextLength*sf.caption_char_wait_time"
@if exp="debugmode&&f.voice_totaltime<500"
; @eval exp="f.voice_totaltime=2000"
@eval exp="dm('■■■!キャプション待ち時間が短いです。f.voice_totaltime:'+f.voice_totaltime)"
@eval exp="dm('■■■!kag.fore.messages[0].ch_call_count:'+kag.fore.messages[0].ch_call_count)"
@eval exp="dm('■■■!obj_gfontword.debug_str.length:'+obj_gfontword.debug_str.length)"
@eval exp="dm('■■■!kag.messageTextLength.length:'+kag.messageTextLength)"
@endif
@endif
@endif
@eval exp="mp.nowait=false" cond="mp.nowait===void"
@ignore exp="mp.nowait"
@if exp="mp.infinity_escape"
@eval exp="f.voice_totaltime+=300"
@else
@eval exp="f.voice_totaltime+=sf.voice_add_wait_time"
@endif
@eval exp="f.voice_totaltime+=(+mp.waittime)" cond="mp.waittime!==void"
@eval exp="tf.waittime = f.voice_playing_tickcount+f.voice_totaltime-System.getTickCount()"
@eval exp="dm('tf.waittime:'+tf.waittime) if debugmode"
@eval exp="dm('f.voice_playing_tickcount:'+f.voice_playing_tickcount) if debugmode"
@eval exp="dm('f.voice_totaltime:'+f.voice_totaltime) if debugmode"
@stable status=true cond="mp.stable"
@if exp="sf.voice_add_wait_infinity"
@if exp="mp.infinity_escape"
@if exp="f.talk.voiceplay&&f.talk.voiceenable"
@wvoice canskip=true
@else
@wait time=&"tf.waittime" 絶対時間=true
@endif
@else
@l
@endif
@else
@zmove layer=&sf.layerProgress page=fore time=&"tf.waittime" path="(1280,0,255)" 絶対時間=true
@zmove layer=&sf.layerProgress page=back time=&"tf.waittime" path="(1280,0,255)" 絶対時間=true
@time_l time=&"tf.waittime" 絶対時間=true
;ここでtime_lの状態を見る最後まで待ったか、中断したのか
;最後まで待った場合、当然、音声は再生終わってるはずだが、バグってる可能性も考慮し、ボイスを一応待つ
@wvoice canskip=true cond="obj_timerp.result>0"
@stopmove
@endif
@endif
; ;ここでポーズチェックして停止timer_pが発生した場合はobj_timerp.resultが1になってる。つまりこのときはpauseしてれば待たねばならない。逆にtimer_p待ちを中断した場合はpauseも終了させなくてはならない
@if exp="f.pause && obj_timerp.result>0"
@eval exp="f.pause_waiting=true"
@stable status=true cond="mp.stable"
@l
@endif
@stable status=false cond="mp.stable"
;ポーズをリセット
@eval exp="kag.pauseMenuItem.enabled=false"
@eval exp="pauseSet(false)"
; @if exp="f.loopanime_replaycount"
; @if exp="System.getKeyState(VK_CONTROL)"
; @cancelskip
; @else
; @wvoice
; @endif
; @else
; @if exp="System.getKeyState(VK_CONTROL)"
; @cancelskip
; @else
; @time_l time=&"(f.voice_playing_tickcount+f.voice_totaltime)-System.getTickCount()" 絶対時間=true
; @endif
; @endif
@eval exp="mp.voicefadetime=+mp.time\4" cond="mp.voicefadetime===void"
@if exp="+mp.voicefadetime<50"
@voicestop
@else
@voicefade time=%voicefadetime
@endif
@sound storage=%se cond="mp.se!==void"
@sound_ storage=%se_ cond="mp.se_!==void"
@eval exp="mp.nocaption=false" cond="mp.nocaption===void"
@ignore exp="mp.nocaption"
@zmove layer=&sf.layerCaption page=fore time=%time path=&"'(0,%d,0)'.sprintf(kag.fore.layers[sf.layerCaption].top-getLayerHeight(sf.layerCaption))"
@zmove layer=&sf.layerCaption page=back time=%time path=&"'(0,%d,0)'.sprintf(kag.back.layers[sf.layerCaption].top-getLayerHeight(sf.layerCaption))"
@freeimage layer=&"sf.layerProgress" page=fore
@freeimage layer=&"sf.layerProgress" page=back
@wm canskip=true
@wm canskip=true
@endignore
@image layer=&sf.layerCaption page=fore storage="sysBackTrans" visible=true opacity=255 left=0 top=0
@wvoicefade canskip=true
@cm
@r
@endif
@stoptrans
@clearface
@endmacro
@macro name="主人公"
@eval exp="f.captionChara='player'"
@talk * name="主人公" prefix=&"'%s %s (%s): '.sprintf(sf.名字,sf.名前,sf.年齢)" bracket="「" voiceplay=false captionvisible=&"sf.caption_enable['player']"
@グラフィカルフォント:登場 人物="主人公" cond="f.gamemode=='cinema'||f.gamemode=='cinemadv'"
@endmacro
@macro name="/主人公"
@グラフィカルフォント:台詞終了
@endtalk_gfont *
@endtalk * bracket="」"
@eval exp="f.captionChara=''"
@グラフィカルフォント:退場
@endmacro
@macro name="思考"
@eval exp="f.captionChara='sinjo'"
@talk * name="思考" prefix="" bracket="" voiceplay=false captionvisible=&"sf.caption_enable['sinjo']"
@グラフィカルフォント:登場 人物="思考" cond="f.gamemode=='cinema'||f.gamemode=='cinemadv'"
@endmacro
@macro name="/思考"
@グラフィカルフォント:台詞終了
@endtalk_gfont *
@endtalk * bracket=""
@eval exp="f.captionChara=''"
@グラフィカルフォント:退場
@endmacro
@macro name="マコ"
@eval exp="f.captionChara='mako'"
@talk * name="マコ" prefix=&"'Mako %s: '.sprintf((sf.expression_level)? '(9)':'(×)')" bracket="「" voiceenable=&"sf.ve_mako" captionvisible=&"sf.caption_enable['mako']"
@グラフィカルフォント:登場 人物="マコ" cond="f.gamemode=='cinema'||f.gamemode=='cinemadv'"
@endmacro
@macro name="/マコ"
@グラフィカルフォント:台詞終了
@endtalk_gfont *
@endtalk * bracket="」"
@eval exp="f.captionChara=''"
@グラフィカルフォント:退場
@endmacro
@macro name="マコモノローグ"
@eval exp="f.captionChara='mako'"
@talk * name="思考" prefix="" bracket=" " voiceplay=false captionvisible=&"sf.caption_enable['mako']" indent_enabled=false
@グラフィカルフォント:登場 人物="マコ" cond="f.gamemode=='cinema'||f.gamemode=='cinemadv'"
@endmacro
@macro name="/マコモノローグ"
@グラフィカルフォント:台詞終了
@endtalk_gfont *
@endtalk * bracket=""
@eval exp="f.captionChara=''"
@グラフィカルフォント:退場
@endmacro
@macro name="マコ心情"
@eval exp="f.captionChara='mako'"
@talk * name="思考" prefix="" bracket="" voiceplay=false captionvisible=&"sf.caption_enable['mako']"
@グラフィカルフォント:登場 人物="マコ" cond="f.gamemode=='cinema'||f.gamemode=='cinemadv'"
@endmacro
@macro name="/マコ心情"
@グラフィカルフォント:台詞終了
@endtalk_gfont *
@endtalk * bracket=""
@eval exp="f.captionChara=''"
@グラフィカルフォント:退場
@endmacro
@macro name="地の文"
@eval exp="f.captionChara='narr'"
@talk * name="" prefix="" bracket=" " voiceplay=false captionvisible=&"sf.caption_enable['narr']" indent_enabled=false
@グラフィカルフォント:登場 人物="地の文" cond="f.gamemode=='cinema'||f.gamemode=='cinemadv'"
@endmacro
@macro name="/地の文"
@グラフィカルフォント:台詞終了
@endtalk_gfont *
@endtalk * bracket=""
@eval exp="f.captionChara=''"
@グラフィカルフォント:退場
@endmacro
@macro name="少年"
@eval exp="f.captionChara='other'"
@talk * name="少年" prefix="Boy: " bracket="「" voiceenable=&"sf.ve_other" captionvisible=&"sf.caption_enable['other']"
@グラフィカルフォント:登場 人物="other" cond="f.gamemode=='cinema'||f.gamemode=='cinemadv'"
@endmacro
@macro name="/少年"
@グラフィカルフォント:台詞終了
@endtalk_gfont *
@endtalk * bracket="」"
@eval exp="f.captionChara=''"
@グラフィカルフォント:退場
@endmacro
@macro name="友達"
@eval exp="f.captionChara='other'"
@talk * name="友達" prefix="Friend: " bracket="「" voiceenable=&"sf.ve_other" captionvisible=&"sf.caption_enable['other']"
@グラフィカルフォント:登場 人物="other" cond="f.gamemode=='cinema'||f.gamemode=='cinemadv'"
@endmacro
@macro name="/友達"
@グラフィカルフォント:台詞終了
@endtalk_gfont *
@endtalk * bracket="」"
@eval exp="f.captionChara=''"
@グラフィカルフォント:退場
@endmacro
@macro name="少女"
@eval exp="f.captionChara='other'"
@talk * name="少女" prefix="Girl: " bracket="「" voiceenable=&"sf.ve_other" captionvisible=&"sf.caption_enable['other']"
@グラフィカルフォント:登場 人物="other" cond="f.gamemode=='cinema'||f.gamemode=='cinemadv'"
@endmacro
@macro name="/少女"
@グラフィカルフォント:台詞終了
@endtalk_gfont *
@endtalk * bracket="」"
@eval exp="f.captionChara=''"
@グラフィカルフォント:退場
@endmacro
;---------------------------------------
;----------------------------------------
;scene_return_point シーンの頭に戻るのリターンポイントの処理
;各シナリオの頭に共通なのでまとめておきます
;----------------------------------------
@macro name=scene_return_point
@clickescapeend
;↓これ入れないと、wvoiceで待っちゃうよ
@eval exp="f.loopanime_replaycount=0"
@eval exp="f.looparea_startlabel=''"
@eval exp="f.looparea_endlabel=''"
@voicefade time=1000
;今回だけリンゴフェードだよ
@リンゴフェードアウト
;@場面終了処理 time=2000
@wvoicefade
@endmacro
;---------------------------------------
;scenariobegin
; シナリオの最初においてください
;---------------------------------------
@macro name=scenariobegin
@eval exp="f.scenarioperforming=true"
@eval exp="f.scene_counter=0"
@eval exp="f.loopend_waiting=false"
@rclick call=true storage="first.ks" target="*rclick" enabled=true
@eval exp="f.return_start_label='*return_point'"
@eval exp="f.return_start_storage=kag.mainConductor.curStorage"
@eval exp="f.return_select_label = '*return_point'"
@eval exp="f.return_select_storage = 'g5sCommon.ks'"
@eval exp="kag.goToSceneStartMenuItem.enabled=true"
;@eval exp="kag.sceneReplayMenuItem.enabled=true"
@eval exp="f.dramavolume = sf.dramavolume_default"
@eval exp="flag.clear()"
@endmacro
;---------------------------------------
;scenarioend
; シナリオの最後においてください
;---------------------------------------
@macro name=scenarioend
@eval exp="f.scenarioperforming=false"
@eval exp="kag.goToSceneStartMenuItem.enabled=false"
; @eval exp="kag.sceneReplayMenuItem.enabled=false"
@eval exp="f.bgm_h_flag=false"
@eval exp="f.hscene_bgm=''"
@endmacro
;----------------------------------------
;sceneend
;シーンの終わりに入れます(音楽は止まりません)
;----------------------------------------
@macro name=sceneend
; @paragraph
@eval exp="mp.soundfade=true" cond="mp.soundfade===void"
@eval exp="mp.bgvfade=true" cond="mp.bgvfade===void"
@eval exp="mp.無力化=true" cond="mp.無力化===void"
@eval exp="mp.絶対時間=false" cond="mp.絶対時間===void"
@soundfade time=%time|1000 cond="mp.soundfade"
@bgvfade time=%time|1000 絶対時間=%絶対時間 cond="mp.bgvfade"
@画面無力化 絶対時間=%絶対時間 cond="mp.無力化"
@if exp="mp.type=='flash'"
@if exp="mp.white"
@flashout layer=&sf.layerBlind type=white time=%time|1000 絶対時間=%絶対時間
@else
@flashout layer=&sf.layerBlind type=black time=%time|1000 絶対時間=%絶対時間
@endif
@else
@if exp="mp.white"
@whiteout time=%time|1000 絶対時間=%絶対時間
@else
@fadeout time=%time|1000 絶対時間=%絶対時間
@endif
@endif
@wbgvfade cond="mp.bgvfade"
@wsoundfade cond="mp.soundfade"
@endmacro
;----------------------------------------
;loopbegin アニメセクションの直前においてください
;loopbegin
;----------------------------------------
@iscript
sf.loopbegin_first = true if sf.loopbegin_first === void; //ループシーンに入ったことがない
@endscript
@macro name=loopbegin
@eval exp="f.loopanime_replaycount=0"
@eval exp="f.loopend_waiting=false"
@eval exp="f.looparealabel=kag.conductor.curLabel"
; @zimage layer=&sf.layerMessage page=fore storage="imgClickToFinish" visible=true opacity=255 left=1085 top=&680-21
@zimage layer=&sf.layerMessageBase page=fore storage="buttonFinish0" visible=true opacity=255 left=0 top=620
@zimage layer=&sf.layerMessageBase page=back storage="buttonFinish0" visible=true opacity=255 left=0 top=620
@laylock layer=&sf.layerMessageBase
@freeimage layer=&sf.layerMessage page=fore
@freeimage layer=&sf.layerMessage page=back
@laylock layer=&sf.layerMessage
@eval exp="itaz.makeScene(kag.currentLabel,%[left:0,top:620,width:100,height:100])"
@eval exp="itaz.set(%[name:'ejacration',type:'kodomoButton',enabled:true,area:(new Rect('0,20,,80,80')).str_polygon,onEnter:function(dic){kag.fore.layers[sf.layerMessage].loadImages(%[storage:'buttonFinish2',visible:true,opacity:255,left:0,top:620]);kag.back.layers[sf.layerMessage].loadImages(%[storage:'buttonFinish2',visible:true,opacity:255,left:0,top:620]);},onLeave:function(dic){kag.fore.layers[sf.layerMessage].visible=false;kag.back.layers[sf.layerMessage].visible=false;},onClick:function(dic){kag.fore.layers[sf.layerMessage].loadImages(%[storage:'buttonFinish1',visible:true,opacity:255,left:0,top:620]);kag.process('',f.looparealabel+'z');}])"
@eval exp="itaz.enabled = true"
@eval exp="itaz.begin()"
; @clickescape script=&"kag.mainConductor.curStorage" label=&"f.looparealabel+'z'"
@if exp="sf.loopbegin_first"
@zbacklay
; @zimage layer=&sf.layerMapHint5 page=back storage="imgClickToFinish" visible=true opacity=255 left=1085 top=&680-21
@zimage layer=&sf.layerMapHint6 page=back storage="sysBackBlack" visible=true opacity=178 left=0 top=0 mode=alpha
@zimage layer=&sf.layerMapHint7 page=back storage="img説明ループシーン" visible=true opacity=255 left=0 top=0 mode=alpha
@ztrans method=crossfade time=1000
@zwt canskip=true
@クリック待ち graph=false time=10000
@zbacklay
; @freeimage layer=&sf.layerMapHint5 page=back
@freeimage layer=&sf.layerMapHint6 page=back
@freeimage layer=&sf.layerMapHint7 page=back
@ztrans method=crossfade time=1000
@zwt canskip=true
@zbacklay
@eval exp="sf.loopbegin_first=false"
@endif
@endmacro
;----------------------------------------
;loopend
;*loopendタグより前に置いて
;実際には*stayloopの直前に置きます
;動作を強制させることもできます 強制動作=0/1/2 (sf.loopanime_replaymodeに対応
;0:ムービーを見る
;1:最初から繰り返す
;2:終了する
;内部でmp.typeというものを使いますがこれは指定しないでください
;----------------------------------------
@macro name=loopend
@stoptrans
@stopmove
@eval exp="itaz.enabled = false"
@eval exp="itaz.end()"
@eval exp="itaz.clear()"
@freeimage layer=&sf.layerMessageBase page=fore
@freeimage layer=&sf.layerMessageBase page=back
@freeimage layer=&sf.layerMessage page=fore
@freeimage layer=&sf.layerMessage page=back
@eval exp="mp.type=+sf.loopanime_replaymode"
;スキップ状態なら強制終了
@eval exp="mp.type=2" cond="kag.skipMode>2"
;強制動作が指定されたらそれを実行
@eval exp="mp.type=+mp.強制動作" cond="mp.強制動作!==void"
@if exp="mp.type==1"
;最初から繰り返す
@if exp="f.loopanime_replaycount==0"
@laylock layer=&sf.layerMessageBase
@laylock layer=&sf.layerMessage
@zimage layer=&sf.layerMessageBase page=fore storage="imgSnow1" visible=true opacity=0 left=1145 top=606
@zimage layer=&sf.layerMessage page=fore storage="imgClickNext" visible=true opacity=0 left=1085 top=&680-21
@zmove layer=&sf.layerMessageBase page=fore time=1000 path="(1145,606,255)"
@zmove layer=&sf.layerMessage page=fore time=1000 path=&"'(1085,%d,255)'.sprintf(680-21)"
@wm canskip=true
@wm canskip=true
@clickescape script=&"kag.mainConductor.curStorage" label=&"f.looparealabel+'z'"
@endif
@eval exp="f.loopanime_replaycount++"
;少し待ってから繰り返し
@zwait time=4000 canskip=true
@cancelskip
@jump target=&"f.looparealabel+'a'"
@elsif exp="mp.type==2"
@jump target=&"f.looparealabel+'z'"
@else
@eval exp="f.loopend_waiting=true"
;laylockはstayscenebeginで掛けます
@stayscenebegin script=&"kag.mainConductor.curStorage" label=&"f.looparealabel+'z'"
@endif
@endmacro
;----------------------------------------
;loopendover ループエンド後処理
;*loopendタグの直後に
;----------------------------------------
@macro name=loopendover
@clickescapeend
@eval exp="itaz.enabled = false"
@eval exp="itaz.end()"
@eval exp="itaz.clear()"
@freeimage layer=&sf.layerMessageBase page=fore
@freeimage layer=&sf.layerMessageBase page=back
@freeimage layer=&sf.layerMessage page=fore
@freeimage layer=&sf.layerMessage page=back
@画面無力化
@clearface
;↓これ入れないと、wvoiceで待っちゃうよ
@eval exp="f.loopanime_replaycount=0"
; @voicefade time=300
; @zmove layer=&sf.layerCaption page=fore time=300 path="(0,0,0)"
@zmove layer=&sf.layerMessageBase page=fore time=300 path="(1145,606,0)"
@zmove layer=&sf.layerMessage page=fore time=300 path="(1085,680,0)"
@wm canskip=true
@wm canskip=true
@wm canskip=true
; @wvoicefade
; @freeimage layer=&sf.layerCaption page=fore
@freeimage layer=&sf.layerMessageBase page=fore
@freeimage layer=&sf.layerMessage page=fore
@layfree
; @voicefade time=1000
; @bgvfade time=1000
; @fadeout time=1000
; @wbgvfade
; @wvoicefade
@cancelskip
@cancelautomode
@clearface
;↓これないと射精シーンなどでループシーンのボイスが残る
@voicestop
@endmacro
;----------------------------------------
;stayscenebegin ムービーシーンクリック待ち
;射精前のクリック待ちはこっちで
;----------------------------------------
;@stayscenebegin script=&kag.mainConductor.curStorage label="*staypreejacend"
;*staypreejac
;@moviestay
;@動画 storage="ev01_04_oral_face2" se2="seev01ロープb1"
;@moviestay
;@動画 storage="ev01_04_oral_tit2" se2="seev01ロープb2"
;@moviestay
;@動画 storage="ev01_04_oral" se2="seev01ロープb2"
;@jump target="*staypreejac"
;*staypreejacend
;@staypreejacendover
;----------------------------------------
@macro name=stayscenebegin
@if exp="kag.skipMode>2"
@jump storage=%script target=%label
@else
;クリック待ち(と言っても実際止まるわけではなく処理は次に流れます)
@zimage layer=&sf.layerMessageBase page=fore storage="imgSnow2" visible=true opacity=0 left=1145 top=606
@zimage layer=&sf.layerMessage page=fore storage="imgClickNext" visible=true opacity=0 left=1085 top=&680-21
@zmove layer=&sf.layerMessageBase page=fore time=1000 path="(1145,606,255)"
@zmove layer=&sf.layerMessage page=fore time=1000 path=&"'(1085,%d,255)'.sprintf(680-21)"
@wm canskip=true
@wm canskip=true
@laylock layer=&sf.layerMessageBase
@laylock layer=&sf.layerMessage
@cancelskip
@cancelautomode
@clickescape script=%script label=%label
@endif
@endmacro
;----------------------------------------
@macro name=staysceneend
@eval exp="f.loopend_waiting=false"
@time_l time=50 絶対時間=true
@endmacro
;----------------------------------------
;----------------------------------------
;staypreejacendover
;*staypreejacendの直後に置いといて
;----------------------------------------
@macro name=staypreejacendover
@eval exp="escapeProcReset()"
@layfree
@staysceneend
@画面無力化
@endmacro
;----------------------------------------
;fucksceneover
;挿入CGシーンの終わり処理
;----------------------------------------
@macro name=fucksceneover
@soundfade time=1000
@bgvfade time=1000
@fadeout time=1000
@wbgvfade
@wsoundfade
@endmacro
;----------------------------------------
;射精
;----------------------------------------
@macro name=射精
@eval exp="mp.time=200" cond="mp.time===void"
@eval exp="mp.wait=true" cond="mp.wait===void"
@eval exp="mp.waittime=500" cond="mp.waittime===void"
@eval exp="mp.ズームと射精音のみ=false" cond="mp.ズームと射精音のみ===void"
@eval exp="mp.sound='se射精1bエコー2+6fb'" cond="mp.sound===void"
@if exp="mp.base!==void"
@face layer=0 storage=%base opacity=255 pos="center" time=1000
; @zwait time=500 canskip=true
@endif
@zoom layer=1 time=%time storage=%storage src="-640,-360,2560,1440,0" dest="0,0,1280,720,255"
@wzoom canskip=true
@zimage layer=0 page=fore storage=%storage visible=true opacity=255 left=0 top=0
@freeimage layer=1 page=fore
@地震 level=3
@sound storage=%sound
@sound storage=%sound2 cond="mp.sound2!==void"
@sound storage=%sound3 cond="mp.sound3!==void"
@sound storage=%sound4 cond="mp.sound4!==void"
@sound storage=%sound5 cond="mp.sound5!==void"
@ignore exp="mp.ズームと射精音のみ"
; @地震 level=3
@wsound
@zwait time=%waittime canskip=true cond="mp.wait"
@endignore
@endmacro
;----------------------------------------
;放尿
;----------------------------------------
@macro name=放尿
@eval exp="mp.time=200" cond="mp.time===void"
@eval exp="mp.wait=true" cond="mp.wait===void"
@eval exp="mp.waittime=500" cond="mp.waittime===void"
@eval exp="mp.sound=mp.se" cond="mp.se!==void"
@eval exp="mp.sound='se放尿3'" cond="mp.sound===void"
@if exp="mp.base!==void"
@face layer=0 storage=%base opacity=255 pos="center" time=1000
; @zwait time=500 canskip=true
@endif
@zoom layer=1 time=%time storage=%storage src="-640,-360,2560,1440,0" dest="0,0,1280,720,255"
@wzoom canskip=true
@zimage layer=0 page=fore storage=%storage visible=true opacity=255 left=0 top=0
@freeimage layer=1 page=fore
@sound storage=%sound
@sound storage=%se2 cond="mp.se2!==void"
@地震 level=2
@endmacro
;----------------------------------------
;@画像アニメ
;zoom:最初にズームさせるストレージを指定
;asd:asdファイルを指定asdを指定しないときはzoomとfinalの2連ズームになります
;final:最後の画像を指定
;se:サウンドを指定
;soundspecial:サウンドを指定
;quake:地震のサイズを指定0-5:0は揺れません
;----------------------------------------
@macro name="画像アニメ"
; @eval exp="mp.quake=0" cond="mp.quake===void" quakeは削除しました20150308
@eval exp="mp.time=500" cond="mp.time===void"
@eval exp="mp.time2=200" cond="mp.time2===void"
@if exp="mp.asd!==void"
@ignore exp="Storages.isExistentStorage(mp.asd)"
@ignore exp="Storages.isExistentStorage(mp.asd+'.asd')"
@eval exp="mp.asd=void"
@endignore
@endignore
@endif
@if exp="sf.enableImageAnim&&mp.asd!==void"
@zimage layer=0 page=fore storage=%asd visible=false left=0 top=0 opacity=255 mode=alpha cond="sf.enableImageAnim"
@if exp="mp.zoom!==void"
@zoom layer=1 time=%time storage=%zoom src="-640,-360,2560,1440,0" dest="0,0,1280,720,255"
@wzoom canskip=true
@freeimage layer=1 page=fore
@endif
@if exp="mp.first!==void"
@zimage layer=1 page=fore storage=%first visible=true opacity=0 left=0 top=0
@zmove layer=1 page=fore time=%time path="(0,0,255)"
@wm canskip=true
@freeimage layer=1 page=fore
@endif
@layopt layer=0 page=fore visible=true
@animstart layer=0 page=fore seg=1 target="*anim"
@soundspecial1 storage=%soundspecial1 cond="mp.soundspecial1!==void"
@soundspecial2 storage=%soundspecial2 cond="mp.soundspecial2!==void"
@soundspecial3 storage=%soundspecial3 cond="mp.soundspecial3!==void"
@soundspecial4 storage=%soundspecial4 cond="mp.soundspecial4!==void"
@soundspecial5 storage=%soundspecial5 cond="mp.soundspecial5!==void"
;quakeは削除しました20150308
; @if exp="+mp.quake>0"
; @eval exp="mp.quaketime=200" cond="mp.quaketime===void"
; @quake time=%quaketime vmax=&"+mp.quake*10" cond="sf.quake_enabled"
; @endif
@wa layer=0 seg=1 canskip=true cond="sf.enableImageAnim"
@zimage layer=0 page=fore storage=%final visible=true left=0 top=0 opacity=255 mode=alpha
@else
@if exp="mp.zoom!==void"
@zoom layer=0 time=%time storage=%zoom src="-640,-360,2560,1440,0" dest="0,0,1280,720,255"
@wzoom canskip=true
@endif
@if exp="mp.first!==void"
@zimage layer=0 page=fore storage=%first visible=true opacity=0 left=0 top=0
@zmove layer=0 page=fore time=%time path="(0,0,255)"
@wm canskip=true
@endif
@soundspecial1 storage=%soundspecial1 cond="mp.soundspecial1!==void"
@soundspecial2 storage=%soundspecial2 cond="mp.soundspecial2!==void"
@soundspecial3 storage=%soundspecial3 cond="mp.soundspecial3!==void"
@soundspecial4 storage=%soundspecial4 cond="mp.soundspecial4!==void"
@soundspecial5 storage=%soundspecial5 cond="mp.soundspecial5!==void"
;quakeは削除しました20150308
; @if exp="+mp.quake>0"
; @eval exp="mp.quaketime=200" cond="mp.quaketime===void"
; @quake time=%quaketime vmax=&"+mp.quake*10" cond="sf.quake_enabled"
; @endif
@zimage layer=0 page=fore storage=%final visible=true left=0 top=0 opacity=255 mode=alpha
; @zoom layer=1 time=%time2 storage=%final src="-640,-360,2560,1440,0" dest="0,0,1280,720,255"
; @wzoom canskip=true
@endif
@face layer=0 storage=%after opacity=255 left=0 top=0 cond="mp.after!==void"
; @wq canskip=true
@endmacro
;----------------------------------------
@macro name="断面射精"
;これは直接呼ばないで。下の断面射精*を使って
;storage_format="dan_syasei_%02d_00"
; ↓とりあえず一定時間溜めます。先読みで時間が掛かったときを考えてuntilに
@resetwait
;先読み
@eval exp="mp.se='se射精1エコー2+6db'" cond="mp.se===void"
@playse buf=&"sf.sebuf_end" storage=%se
@stopse buf=&"sf.sebuf_end"
@playse buf=&"sf.sebuf_end" storage=%se2 cond="mp.se2!==void"
@stopse buf=&"sf.sebuf_end"
@playse buf=&"sf.sebuf_end" storage=%se_end1 cond="mp.se_end1!==void"
@stopse buf=&"sf.sebuf_end"
@playse buf=&"sf.sebuf_end" storage=%se_end2 cond="mp.se_end2!==void"
@stopse buf=&"sf.sebuf_end"
@playse buf=&"sf.sebuf_end" storage=%se_end3 cond="mp.se_end3!==void"
@stopse buf=&"sf.sebuf_end"
@image layer=0 page=fore storage=&"mp.storage_format.sprintf(0)" visible=false opacity=255 left=0 top=0 cond="(int)mp.end>=0"
@image layer=1 page=fore storage=&"mp.storage_format.sprintf(1)" visible=false opacity=255 left=0 top=0 cond="(int)mp.end>=1"
@image layer=2 page=fore storage=&"mp.storage_format.sprintf(2)" visible=false opacity=255 left=0 top=0 cond="(int)mp.end>=2"
@image layer=3 page=fore storage=&"mp.storage_format.sprintf(3)" visible=false opacity=255 left=0 top=0 cond="(int)mp.end>=3"
@image layer=4 page=fore storage=&"mp.storage_format.sprintf(4)" visible=false opacity=255 left=0 top=0 cond="(int)mp.end>=4"
@image layer=5 page=fore storage=&"mp.storage_format.sprintf(5)" visible=false opacity=255 left=0 top=0 cond="(int)mp.end>=5"
@image layer=6 page=fore storage=&"mp.storage_format.sprintf(6)" visible=false opacity=255 left=0 top=0 cond="(int)mp.end>=6"
@image layer=7 page=fore storage=&"mp.storage_format.sprintf(7)" visible=false opacity=255 left=0 top=0 cond="(int)mp.end>=7"
@image layer=8 page=fore storage=&"mp.storage_format.sprintf(8)" visible=false opacity=255 left=0 top=0 cond="(int)mp.end>=8"
@image layer=9 page=fore storage=&"mp.storage_format.sprintf(9)" visible=false opacity=255 left=0 top=0 cond="(int)mp.end>=9"
@image layer=10 page=fore storage=&"mp.storage_format.sprintf(10)" visible=false opacity=255 left=0 top=0 cond="(int)mp.end>=10"
;先読みここまで
@wait mode=until time=500
@zoom layer=0 time=500 storage=&"mp.storage_format.sprintf(0)" src="-640,-360,2560,1440,0" dest="0,0,1280,720,255" accel=2
@wzoom canskip=true
@zwait time=100 canskip=true
; @quake time=500 vmax=10 cond="sf.quake_enabled"quakeは削除しました20150308
@sound storage=%se
@sound storage=%se2 cond="mp.se2!==void"
; @resetwait
@eval exp="mp.time=50" cond="mp.time===void"
@layopt layer=1 page=fore visible=true
; @wait mode=until time=20
@wait time=%time canskip=true
@if exp="(int)mp.end>=2"
@layopt layer=2 page=fore visible=true
; @wait mode=until time=40
@wait time=%time canskip=true
@endif
@if exp="(int)mp.end>=3"
@layopt layer=3 page=fore visible=true
; @wait mode=until time=60
@wait time=%time canskip=true
@endif
@if exp="(int)mp.end>=4"
@layopt layer=4 page=fore visible=true
; @wait mode=until time=80
@wait time=%time canskip=true
@endif
@if exp="(int)mp.end>=5"
@layopt layer=5 page=fore visible=true
; @wait mode=until time=100
@wait time=%time canskip=true
@endif
@if exp="(int)mp.end>=6"
@layopt layer=6 page=fore visible=true
; @wait mode=until time=120
@wait time=%time canskip=true
@endif
@if exp="(int)mp.end>=7"
@layopt layer=7 page=fore visible=true
; @wait mode=until time=140
@wait time=%time canskip=true
@endif
@if exp="(int)mp.end>=8"
@layopt layer=8 page=fore visible=true
; @wait mode=until time=160
@wait time=%time canskip=true
@endif
@if exp="(int)mp.end>=9"
@layopt layer=9 page=fore visible=true
; @wait mode=until time=180
@wait time=%time canskip=true
@endif
@if exp="(int)mp.end>=10"
@layopt layer=10 page=fore visible=true
@endif
@ignore exp="mp.nowait"
@sound storage=%se_end1 cond="mp.se_end1!==void"
@wsound
@sound storage=%se_end2 cond="mp.se_end2!==void"
@zwait time=500 canskip=true
@sound storage=%se_end3 cond="mp.se_end3!==void"
@fadeout time=1000
@endif
@endmacro
;----------------------------------------
@macro name="断面射精01"
; @断面射精 * storage_format="dan_syasei_01_%02d" end=10 se="se射精1エコー2+6db" se_end1="se肉が落ちる音べちゃっ"
@断面射精 * storage_format="dan_syasei_01_%02d" end=10 se="se射精1bエコー2+6fb"
@endmacro
;----------------------------------------
@macro name="断面射精01b"
; @断面射精 * storage_format="dan_syasei_01_ura_%02d" end=10 se="se射精1エコー2+6db" se_end1="se肉が落ちる音べちゃっ"
@断面射精 * storage_format="dan_syasei_01_ura_%02d" end=10 se="se射精1bエコー2+6fb"
@endmacro
;----------------------------------------
@macro name="断面射精アナル"
@断面射精 * storage_format="dan_syasei_02_%02d" end=9 se="se射精1bエコー2+6fb"
@endmacro
;----------------------------------------
@macro name="断面射精02"
; @断面射精 * storage_format="dan_syasei_03_%02d" end=10 se="se射精1エコー2+6db" se_end1="se肉が落ちる音べちゃっ"
@断面射精 * storage_format="dan_syasei_03_%02d" end=10 se="se射精1bエコー2+6fb"
@endmacro
;----------------------------------------
@macro name="断面射精03"
; @断面射精 * storage_format="dan_syasei_04_%02d" end=10 se="se射精1エコー2+6db" se_end1="se肉が落ちる音べちゃっ"
@断面射精 * storage_format="dan_syasei_04_%02d" end=10 se="se射精1エコー2+6db"
@endmacro
;----------------------------------------
;----------------------------------------
;ejaculateover
;射精CGシーンの終わり処理
;ペニス引き抜き音=falseにするとペニスを抜く音が無くなります
;----------------------------------------
@macro name=ejaculateover
@eval exp="mp.ペニス引き抜き音=true" cond="mp.ペニス引き抜き音===void"
@soundfade time=2000
@bgvfade time=2000
@whiteout time=2000
@wbgvfade
@wsoundfade
@zwait time=1000 canskip=true
@if exp="mp.ペニス引き抜き音"
@sound storage="seセックスH抽迭音1回5+20db"
@wsound
@zwait time=1000 canskip=true
@endif
@endmacro
;----------------------------------------
;ペニスを押しつける base= storage=
;----------------------------------------
@iscript
tf.ペニスを押しつけるサウンド="seセックスH抽迭音1回4+20db";
@endscript
@macro name=ペニスを押しつける
@eval exp="mp.layer=(string)sf.layerBackground" cond="mp.layer===void"
@eval exp="mp.time=1000" cond="mp.time===void"
@if exp="mp.base!==void"
@if exp="mp.type=='zoom'"
@zoom layer=&"sf.layerBackground" time=%time|200 storage=%base src="-640,-360,2560,1440,0" dest="0,0,1280,720,255"
@wzoom canskip=true
@else
@face layer=%layer storage=%base opacity=255 pos="center" time=%time
@endif
@else
@zwait time=200 canskip=true
@endif
@face layer=%layer storage=%storage opacity=255 pos="center" time=%time cond="mp.storage!==void"
@soundspecial1 storage=&"tf.ペニスを押しつけるサウンド"
@endmacro
;----------------------------------------
;ペニスを挿入する base= storage=
;ペニスを挿入する base= storage= nozoom=true ←zoom無し
;----------------------------------------
@macro name=ペニスを挿入する
@eval exp="mp.baselayer='0'" cond="mp.baselayer===void"
@eval exp="mp.layer='1'" cond="mp.layer===void"
@eval exp="mp.basetime=1000" cond="mp.basetime===void"
@eval exp="mp.time=500" cond="mp.time===void"
@eval exp="mp.nozoom=false" cond="mp.nozoom===void"
@if exp="mp.base!==void"
@face layer=%baselayer storage=%base opacity=255 pos="center" time=%basetime
@else
@zwait time=200 canskip=true
@endif
@sound storage="seセックスH挿入音3+6db"
@if exp="mp.nozoom"
@face layer=%baselayer storage=%storage opacity=255 pos="center" time=%time
@sound storage="seセックスH抽迭音1回4+20db"
@else
@zoom layer=%layer time=%time storage=%storage src="-640,-360,2560,1440,0" dest="0,0,1280,720,255"
@wzoom canskip=true
@sound storage="seセックスH抽迭音1回4+20db"
@zimage layer=%baselayer page=fore storage=%storage visible=true opacity=255 left=0 top=0
@freeimage layer=%layer page=fore
@endif
@endmacro
;----------------------------------------
;progress_wait
;----------------------------------------
@macro name=progress_wait
@eval exp="mp.絶対時間=false" cond="mp.絶対時間===void"
@zimage layer=&sf.layerProgress page=fore storage="sysProgressBar" visible=true opacity=255 left=0 top=0
@zimage layer=&sf.layerProgress page=back storage="sysProgressBar" visible=true opacity=255 left=0 top=0
@zmove layer=&sf.layerProgress page=fore time=%time path="(1280,0,255)" 絶対時間=%絶対時間
@zmove layer=&sf.layerProgress page=back time=%time path="(1280,0,255)" 絶対時間=%絶対時間
@stable status=true
@time_l time=%time 絶対時間=%絶対時間
@stopmove
@stable status=false
@freeimage layer=&sf.layerProgress page=fore
@freeimage layer=&sf.layerProgress page=back
@endmacro
;----------------------------------------
;ムービーステイでの待ち時間
;----------------------------------------
@macro name=moviestay
@cancelskip
@cancelautomode
@progress_wait time=&"sf.timeMovieStayWait" 絶対時間=true
@zwt canskip=true
@endmacro
;----------------------------------------
;@動画 cinemaマクロを一端ここでラップ
;----------------------------------------
@macro name=動画
@eval exp="mp.絶対時間=false" cond="mp.絶対時間===void"
@eval exp="mp.loop=true" cond="mp.loop===void"
@eval exp="mp.time=500" cond="mp.time===void"
@if exp="mp.排他描画===void"
@if exp="mp.layer===void"
@eval exp="mp.排他描画=true"
@else
;レイヤーがデフォルトではない場合で、排他描画の指定がなかったら、排他描画しない方がいいよね
@eval exp="mp.排他描画=false"
@endif
@endif
@eval exp="mp.layer=(string)sf.layerMovie" cond="mp.layer===void"
@zwt canskip=true clearface=%排他描画
@stoptrans
@if exp="mp.soundspecial1"
@playse buf=&"sf.sebuf_end" storage=%soundspecial1
@stopse buf=&"sf.sebuf_end"
@endif
@if exp="mp.soundspecial2"
@playse buf=&"sf.sebuf_end" storage=%soundspecial2
@stopse buf=&"sf.sebuf_end"
@endif
@if exp="mp.soundspecial3"
@playse buf=&"sf.sebuf_end" storage=%soundspecial3
@stopse buf=&"sf.sebuf_end"
@endif
@if exp="mp.soundspecial4"
@playse buf=&"sf.sebuf_end" storage=%soundspecial4
@stopse buf=&"sf.sebuf_end"
@endif
@if exp="mp.soundspecial5"
@playse buf=&"sf.sebuf_end" storage=%soundspecial5
@stopse buf=&"sf.sebuf_end"
@endif
@soundspecial1 storage=%soundspecial1 loop=%soundspecial1loop|true cond="mp.soundspecial1!==void"
@soundspecial2 storage=%soundspecial2 loop=%soundspecial2loop|true cond="mp.soundspecial2!==void"
@soundspecial3 storage=%soundspecial3 loop=%soundspecial3loop|true cond="mp.soundspecial3!==void"
@soundspecial4 storage=%soundspecial4 loop=%soundspecial4loop|true cond="mp.soundspecial4!==void"
@soundspecial5 storage=%soundspecial5 loop=%soundspecial5loop|true cond="mp.soundspecial5!==void"
@voice storage=%voice hact=false nolowervolume=false cond="mp.voice!==void"
;今回は動画トランス中に文字を表示させたいので cinema内でwtしません
@cinema * layer=%layer notrans=true 排他描画=%排他描画
@eval exp="cinema_sync_sound_reset(kag.movies[kag.fore.layers[sf.layerMovie]._video_slot])"
@playse buf=&"sf.sebuf_mov1" time=%time storage=%se1 loop=false cond="mp.se1!==void"
@playse buf=&"sf.sebuf_mov2" time=%time storage=%se2 loop=false cond="mp.se2!==void"
@playse buf=&"sf.sebuf_mov3" time=%time storage=%se3 loop=false cond="mp.se3!==void"
@playse buf=&"sf.sebuf_mov4" time=%time storage=%se4 loop=false cond="mp.se4!==void"
@playse buf=&"sf.sebuf_mov5" time=%time storage=%se5 loop=false cond="mp.se5!==void"
@eval exp="mp.facelayer=(string)sf.layerFace" cond="mp.facelayer===void"
@eval exp="mp.faceleft=0" cond="mp.faceleft===void"
@eval exp="mp.facetop=0" cond="mp.facetop===void"
@zimage layer=%facelayer page=back storage=%face visible=true opacity=%faceopacity|255 pos=%facepos left=%faceleft top=%facetop mode=%facemode|alpha cond="mp.face!==void"
@eval exp="mp.face2layer=(string)sf.layerFace2" cond="mp.face2layer===void"
@eval exp="mp.face2left=0" cond="mp.face2left===void"
@eval exp="mp.face2top=0" cond="mp.face2top===void"
@zimage layer=%face2layer page=back storage=%face2 visible=true opacity=%face2opacity|255 pos=%face2pos left=%face2left top=%face2top mode=%face2mode|alpha cond="mp.face2!==void"
@eval exp="mp.face3layer=(string)sf.layerFace3" cond="mp.face3layer===void"
@eval exp="mp.face3left=0" cond="mp.face3left===void"
@eval exp="mp.face3top=0" cond="mp.face3top===void"
@zimage layer=%face3layer page=back storage=%face3 visible=true opacity=%face3opacity|255 pos=%face3pos left=%face3left top=%face3top mode=%face3mode|alpha cond="mp.face3!==void"
@zimage layer=&"sf.layerFilter" page=back storage=%filter visible=true opacity=%filteropacity|255 left=%filterleft|0 top=%filtertop|0 mode=%filtermode|alpha cond="mp.filter!==void"
@zimage layer=&"sf.layerFilter2" page=back storage=%filter2 visible=true opacity=%filter2opacity|255 left=%filter2left|0 top=%filter2top|0 mode=%filter2mode|alpha cond="mp.filter2!==void"
@zimage layer=&"sf.layerFilter3" page=back storage=%filter3 visible=true opacity=%filter3opacity|255 left=%filter3left|0 top=%filter3top|0 mode=%filter3mode|alpha cond="mp.filter3!==void"
@eval exp="mp.trans=true" cond="mp.trans===void"
@if exp="mp.trans"
@if exp="mp.type=='flash'"
@eval exp="mp.flashlayer = (string)(kag.back.layers.count - 1)" cond="mp.flashlayer===void"
@if exp="mp.white"
@zimage layer=%flashlayer page=back storage="sysBackWhite" visible=true opacity=255 left=0 top=0 mode=psdodge5
@else
@zimage layer=%flashlayer page=back storage="sysBackBlack" visible=true opacity=255 left=0 top=0 mode=pshlight
@endif
@ztrans time=50 method=crossfade
@zwt canskip=true
@zmove layer=%flashlayer page=fore time=%time path="(0,0,0)" 絶対時間=%絶対時間
@wm canskip=true
@else
@ztrans time=%time method=crossfade 絶対時間=%絶対時間
@zwt canskip=%canskip|true cond="f.gamemode=='adv'||f.gamemode=='novel'"
@endif
@endif
@endmacro
;----------------------------------------
;@w動画 専用のウェイトマクロ
;----------------------------------------
@macro name=w動画
@eval exp="mp.layer=(string)sf.layerMovie" cond="mp.layer===void"
@zwt canskip=%canskip|true
@wv slot=&"kag.fore.layers[+mp.layer]._video_slot" canskip=%canskip|true
@endmacro
;----------------------------------------
;click to next movie
;----------------------------------------
@macro name=クリック待ち
@zwt canskip=true
@clearface
@eval exp="mp.image='imgClicktonextmovie'" cond="mp.image===void"
@eval exp="mp.left=1052" cond="mp.left===void"
@eval exp="mp.top=696-21" cond="mp.top===void"
@eval exp="mp.graph=true" cond="mp.graph===void"
@eval exp="mp.time=0" cond="mp.time===void"
@eval exp="mp.絶対時間=false" cond="mp.絶対時間===void"
@zimage layer=&sf.layerMessage page=fore storage=%image visible=true opacity=255 left=%left top=%top cond="mp.graph"
@if exp="+mp.time>0"
@progress_wait time=%time 絶対時間=%絶対時間
@stopmove
@else
@stable status=true
@l
@stable status=false
@endif
@layopt layer=&sf.layerMessage page=fore visible=false cond="mp.graph"
@endmacro
;----------------------------------------
;@背景 backマクロを使いません
;type=zoomでズームイン
;----------------------------------------
@macro name=背景
@eval exp="mp.grayscale=false" cond="mp.grayscale!==void"
@eval exp="mp.rgamma=1.0" cond="mp.rgamma!==void"
@eval exp="mp.ggamma=1.0" cond="mp.ggamma!==void"
@eval exp="mp.fliplr=false" cond="mp.fliplr!==void"
@eval exp="mp.flipud=false" cond="mp.flipud!==void"
@if exp="mp.sepia"
@eval exp="mp.grayscale=true"
@eval exp="mp.rgamma=1.3"
@eval exp="mp.ggamma=1.1"
@endif
@stopmove
@zwt canskip=true
@clearface
@if exp="mp.type=='zoom'"
@eval exp="mp.time=200" cond="mp.time===void"
@zoom layer=&"sf.layerBackground" time=%time|200 storage=%storage src="-640,-360,2560,1440,0" dest="0,0,1280,720,255"
@wzoom canskip=true
@else
@eval exp="mp.time=500" cond="mp.time===void"
;今回は動画トランス中に文字を表示させたいのでwtしません
@endif
@zimage layer=&sf.layerBackground page=back storage=%storage top=%top|0 left=%left|0 visible=true opacity=255 mode=alpha grayscale=%grayscale rgamma=%rgamma ggamma=%ggamma fliplr=%fliplr flipud=%flipud
@zimage layer=&sf.layerFace page=back storage=%face visible=true opacity=%faceopacity|255 pos=%facepos left=%faceleft top=%facetop mode=%facemode|alpha grayscale=%grayscale rgamma=%rgamma ggamma=%ggamma fliplr=%fliplr flipud=%flipud cond="mp.face!==void"
@zimage layer=&sf.layerFilter page=back storage=%filter visible=true opacity=%filteropacity|255 left=0 top=0 mode=%filtermode|alpha grayscale=%grayscale rgamma=%rgamma ggamma=%ggamma fliplr=%fliplr flipud=%flipud cond="mp.filter!==void"
@zimage layer=&sf.layerFilter2 page=back storage=%filter2 visible=true opacity=%filter2opacity|255 left=0 top=0 mode=%filter2mode|alpha grayscale=%grayscale rgamma=%rgamma ggamma=%ggamma fliplr=%fliplr flipud=%flipud cond="mp.filter2!==void"
@zimage layer=&sf.layerFilter3 page=back storage=%filter3 visible=true opacity=%filter2opacity|255 left=0 top=0 mode=%filter3mode|alpha grayscale=%grayscale rgamma=%rgamma ggamma=%ggamma fliplr=%fliplr flipud=%flipud cond="mp.filter3!==void"
@eval exp="cinema_sync_sound_reset(kag.movies[kag.fore.layers[sf.layerMovie]._video_slot])"
@ztrans method=crossfade time=%time
@zwt canskip=true cond="f.gamemode=='novel'"
@endmacro
;----------------------------------------
;立ち絵
;----------------------------------------
@macro name=立ち絵
@if exp="kag.skipMode<3"
@eval exp="mp.layer=(string)sf.layerFace" cond="mp.layer===void"
@if exp="getMovieExtPath(mp.storage)!=''"
@動画 layer=%layer storage=%storage time=%time|1000 排他描画=true
@elsif exp="getImageExtPath(mp.storage)!=''"
@if exp="mp.type=='zoom'"
@zoom layer=%layer time=%time|200 storage=%storage src="-640,-360,2560,1440,0" dest="0,0,1280,720,255"
@wzoom canskip=true
@elsif exp="mp.type=='flash'"
@eval exp="mp.flashlayer = kag.fore.layers.count - 1" cond="mp.flashlayer===void"
@if exp="mp.white"
@zimage layer=%flashlayer page=fore storage="sysBackWhite" visible=true opacity=255 left=0 top=0 mode=psdodge5
@else
@zimage layer=%flashlayer page=fore storage="sysBackBlack" visible=true opacity=255 left=0 top=0 mode=pshlight
@endif
@zimage layer=%layer page=fore storage=%storage visible=true opacity=255 left=0 top=0 mode=alpha
@zmove layer=%flashlayer page=fore time=%time|1000 path="(0,0,0)"
@wm canskip=true
@else
@face layer=%layer|3 storage=%storage opacity=255 pos="center" time=%time|1000
@endif
@else
@if exp="sf.debug_nofilealert"
@eval exp="System.inform('@立ち絵 - ファイルが見つかりません:'+mp.storage)"
@else
@dm t=&"'@立ち絵 - ファイルが見つかりません:'+mp.storage"
@endif
@endif
@endif
@endmacro
;----------------------------------------
;イベント絵
;----------------------------------------
@macro name=イベント絵
@if exp="getImageExtPath(mp.storage)!=''"
@eval exp="mp.layer=(string)sf.layerBackground" cond="mp.layer===void"
@if exp="mp.type=='zoom'"
@eval exp="mp.time=200" cond="mp.time===void"
@zoom layer=%layer time=%time storage=%storage src="-640,-360,2560,1440,0" dest="0,0,1280,720,255"
@wzoom canskip=true
@else
@if exp="mp.type=='flash'"
@eval exp="mp.time=1000" cond="mp.time===void"
@eval exp="mp.flashlayer = (string) (kag.back.layers.count-1)" cond="mp.flashlayer===void"
@if exp="mp.white"
@zimage layer=%flashlayer page=back storage="sysBackWhite" visible=true opacity=255 left=0 top=0 mode=psdodge5
@else
@zimage layer=%flashlayer page=back storage="sysBackBlack" visible=true opacity=255 left=0 top=0 mode=pshlight
@endif
@eval exp="mp.time1 = +mp.time \ 8"
@eval exp="mp.time2 = +mp.time - +mp.time1"
@ztrans method=crossfade time=%time1
@zwt canskip=true
@clearface
@zimage layer=%layer page=fore storage=%storage visible=true opacity=255 left=0 top=0 mode=alpha
@zmove layer=%flashlayer page=fore time=%time2 path="(0,0,0)"
@wm canskip=true
@else
@eval exp="mp.time=1000" cond="mp.time===void"
@face layer=%layer storage=%storage opacity=255 pos="center" time=%time
@endif
@endif
@elsif exp="getMovieExtPath(mp.storage)!=''"
@動画 * layer=&sf.layerMovie 排他描画=true
@else
@if exp="sf.debug_nofilealert"
@eval exp="System.inform('@イベント - ファイルが見つかりません:'+mp.storage)"
@else
@dm t=&"'@イベント - ファイルが見つかりません:'+mp.storage"
@endif
@endif
@endmacro
;----------------------------------------
;@環境音 今回はまとめて管理
;----------------------------------------
@macro name=環境音
;はじめてactsceneに入ったときに、専用の演出をする都合により、
;環境音とactsceneの処理を複合させる必要が出てきた。
;よって、はじめてactsceneに入る条件の時では処理を予約だけにする
@if exp="tf.actscene_firstin"
@eval exp="f.環境音type = mp.type"
@else
@if exp="mp.type=='トイレ裏'"
@env1 storage="env環境イズ1" fadetime=%fadetime|1000
@env2 storage="env鳥たちの林" fadetime=%fadetime|1000
@env4 storage="env環境イズホワイト-30db" fadetime=%fadetime|1000
@elsif exp="mp.type=='フェンス際'"
@env1 storage="env環境イズ1" fadetime=%fadetime|1000
@env2 storage="env鳥たちの林" fadetime=%fadetime|1000
@env3 storage="envガヤ公園2子供が多い公園-18db" fadetime=%fadetime|1000
@env4 storage="env環境イズホワイト-30db" fadetime=%fadetime|1000
@env5 storage="envガヤ住宅街1遠い50%" fadetime=%fadetime|1000
@elsif exp="mp.type=='トイレ中'"
@env1 storage="env環境イズ1" fadetime=%fadetime|1000
@env4 storage="env環境イズホワイト-30db" fadetime=%fadetime|1000
@env5 storage="env環境イズ茶色の独立したチャンネル-24db" fadetime=%fadetime|1000
@else
@env1 storage="env環境イズ1" fadetime=%fadetime|1000
@env2 storage="env鳥たちの林" fadetime=%fadetime|1000
@env3 storage="envガヤ公園2子供が多い公園-18db" fadetime=%fadetime|1000
@env4 storage="env環境イズホワイト-30db" fadetime=%fadetime|1000
@endif
@endif
@endmacro
;----------------------------------------
;ゲーム関連
;----------------------------------------
@macro name="actinit"
@eval exp="mp.storage='actinit.ks'" cond="mp.storage===void"
@call storage=%storage target=&"'*%s%s'.sprintf(Storages.chopStorageExt(kag.mainConductor.curStorage),mp.type)"
@endmacro
;----------------------------------------
;@actscene
;append1 20160630 transのタイミングでbeforeとafterに処理を分けました
;----------------------------------------
@macro name="actscene#movie"
@if exp="tf.actscene_firstin"
@eval exp="mp.time=1000" cond="mp.time===void"
@else
@eval exp="mp.time=500" cond="mp.time===void"
@endif
@fadeoutse buf=&tf.soundBudderActMapEnter time=%time
@if exp="tf.actscene_firstin"
@clearface
; @動画 * storage=%storage trans=false
@zimage layer=&sf.layerBackground page=back storage="back空" visible=true opacity=255 left=0 top=0
@zimage layer=&sf.layerBlind page=back storage="fadeinApple" visible=true opacity=255 left=0 top=-1948
@ztrans method=crossfade time=%time
@zwt canskip=true
; @sound storage="seベルツリー鈴鐘シャラララララン下がる"
@zmove layer=&sf.layerBlind page=fore time=1000 path="(0,720,255)"
; @zmove layer=&sf.layerBlind page=fore time=2000 path="(0,720,255)"
; @zoom layer=&sf.layerMapHint2 page=fore time=2000 storage="actOpen1lt" src="-519,-242,939,420,0" dest="0,0,470,210,255"
; @zoom layer=&sf.layerMapHint3 page=fore time=2000 storage="actOpen1rb" src="536,388,962,539,0" dest="799,450,481,270,255"
; @zoom layer=&sf.layerMapHint4 page=fore time=2000 storage="actOpen1lb" src="-315,986,966,1060,0" dest="0,190,483,530,255"
; @zoom layer=&sf.layerMapHint5 page=fore time=2000 storage="actOpen1rt" src="453,-231,1075,786,0" dest="742,0,538,393,255"
; @wzoom canskip=true
; @wzoom canskip=true
; @wzoom canskip=true
; @wzoom canskip=true
@wm canskip=true
@eval exp="tf.actscene_firstin=false"
@環境音 type=&f.環境音type cond="f.環境音type!==void"
@eval exp="f.環境音type=void"
@rclick enabled=false
@endif
@動画 * storage=%storage time=%time trans=false
@zimage layer=&sf.layerFace page=back storage=%face visible=true opacity=%faceopacity|255 left=%faceleft|0 top=%facetop|0 mode=%facemode|alpha cond="mp.face"
@zimage layer=&sf.layerFace2 page=back storage=%face2 visible=true opacity=%face2opacity|255 left=%face2left|0 top=%face2top|0 mode=%face2mode|alpha cond="mp.face2"
@zimage layer=&sf.layerFace3 page=back storage=%face3 visible=true opacity=%face3opacity|255 left=%face3left|0 top=%face3top|0 mode=%face3mode|alpha cond="mp.face3"
@zimage layer=&sf.layerMapHintRing page=back storage="mapRingApple" visible=true opacity=255 left=1250 top=0
@sound buf=&tf.soundBudderActMapEnter storage="se地面を踏む"
@endmacro
;----------------------------------------
@macro name="actscene#map"
@if exp="tf.actscene_firstin"
@eval exp="mp.time=1000" cond="mp.time===void"
@else
@eval exp="mp.time=500" cond="mp.time===void"
@endif
@ztrans method=crossfade time=%time
@zoom layer=&sf.layerMapHint2 page=back time=%time storage="actOpen1lt" src="-519,-242,939,420,0" dest="0,0,470,210,255"
@zoom layer=&sf.layerMapHint3 page=back time=%time storage="actOpen1rb" src="536,388,962,539,0" dest="799,450,481,270,255"
@zoom layer=&sf.layerMapHint4 page=back time=%time storage="actOpen1lb" src="-315,986,966,1060,0" dest="0,190,483,530,255"
@zoom layer=&sf.layerMapHint5 page=back time=%time storage="actOpen1rt" src="453,-231,1075,786,0" dest="742,0,538,393,255"
;@zmove layer=&sf.layerMapHint0 page=back time=%time path="(0,0,255)"
;@zmove layer=&sf.layerMapHint1 page=back time=%time path="(1077,0,255)"
; @wm canskip=true
; @wm canskip=true
@wzoom canskip=true
@wzoom canskip=true
@wzoom canskip=true
@wzoom canskip=true
@zwt canskip=true
@stopmove
@stopzoom
@stoptrans
@clearface
@zbacklay
;---
@if exp="mp.説明"
@zimage layer=&sf.layerMapHint6 page=back storage="sysBackBlack" visible=true opacity=178 left=0 top=0 mode=alpha
@zimage layer=&sf.layerMapHint7 page=back storage="img説明" visible=true opacity=255 left=0 top=0 mode=alpha
@ztrans method=crossfade time=1000
@zwt canskip=true
@クリック待ち graph=false time=10000
@zbacklay
@freeimage layer=&sf.layerMapHint6 page=back
@freeimage layer=&sf.layerMapHint7 page=back
@ztrans method=crossfade time=1000
@zwt canskip=true
@zbacklay
@endif
;---
@いたずら準備
@call storage=%itazura
@freeimage layer=&sf.layerMapHint0 page=back
@freeimage layer=&sf.layerMapHint1 page=back
@freeimage layer=&sf.layerMapHint2 page=back
@freeimage layer=&sf.layerMapHint3 page=back
@freeimage layer=&sf.layerMapHint4 page=back
@freeimage layer=&sf.layerMapHint5 page=back
@freeimage layer=&sf.layerMapHint6 page=back
@freeimage layer=&sf.layerMapHint7 page=back
@eval exp="for( var i=0 ; i<tf.iconbuttonlist.count ; i++ ){kag.back.layers[sf.layerMapIcon0+i].loadImages(%[page:'back',storage:@'mapicon${tf.iconbuttonlist[i].name}',visible:true,opacity:255,left:tf.iconbuttonlist[i].x,top:tf.iconbuttonlist[i].y]);tf.iconbuttonlist[i].layer_index=sf.layerMapIcon0+i;}"
@zimage layer=&"sf.layerSight" page=back storage="sysEyeSightWhite" visible=true opacity=&sf.opacityEyeSight0 left=&"kag.fore.base.cursorX-360" top=&"kag.fore.base.cursorY-360" mode="psdodge5"
@zimage layer=&sf.layerActDecorate page=back storage="actDecorate4" visible=true opacity=255 left=0 top=0
@sound3 storage=&"'se森林公園ガヤ(一瞬)%d'.sprintf(intrandom(1,5))"
@ztrans time=%time method=crossfade 絶対時間=%絶対時間
@zwt canskip=true
@clearface
;---
@stable status=true
@eval exp="itaz.hookMouseMove=actMoveSight"
@いたずら開始
@eval exp="setVolumeLimiterENV(0.8)"
;いちおうここでもfalseにしておきます
@eval exp="tf.actMapIconButtonClicked=false"
@endmacro
;----------------------------------------
@macro name="actscene"
@actscene#movie *
@actscene#map *
@endmacro
;----------------------------------------
;@actclose
;----------------------------------------
@macro name="actclose"
@stoptrans
@stopmove
;↓旧タイプ
;@mapdisable layer=base page=fore
;@mapdisable layer=base page=back
;↓新タイプ
@いたずら終了
@eval exp="for( var i=0 ; i<tf.iconbuttonlist.count ; i++ ){tf.iconbuttonlist.clear();}"
;--まで
;@eval exp="mp.target=true" cond="mp.target===void"
@eval exp="mp.target=true" cond="!tf.actMapIconButtonClicked && mp.target===void"
@eval exp="tf.actMapIconButtonClicked=false"
@eval exp="kag.fore.base.internalMouseMove=tf.internalMouseMove_fore"
@eval exp="kag.back.base.internalMouseMove=tf.internalMouseMove_back"
@eval exp="tf.cursorX=kag.fore.base.cursorX"
@eval exp="tf.cursorY=kag.fore.base.cursorY"
@move_more layer=&"sf.layerSight" horizon=0 vertical=0 da=0 time=100 nowait=true
@move_more layer=&"sf.layerActDecorate" horizon=0 vertical=0 da=0 time=50 nowait=true
@move_more layer=&"sf.layerActDecorate2" horizon=0 vertical=0 da=0 time=50 nowait=true
@move_more layer=&"sf.layerActDecorate3" horizon=0 vertical=0 da=0 time=50 nowait=true
@move_more layer=&"sf.layerActDecorate4" horizon=0 vertical=0 da=0 time=50 nowait=true
@move_more layer=&"sf.layerMapHintRing" horizon=0 vertical=0 da=0 time=50 nowait=true
@move_more layer=&"sf.layerMapIcon0" horizon=0 vertical=0 da=0 time=50 nowait=true
@move_more layer=&"sf.layerMapIcon1" horizon=0 vertical=0 da=0 time=50 nowait=true
@move_more layer=&"sf.layerMapIcon2" horizon=0 vertical=0 da=0 time=50 nowait=true
@move_more layer=&"sf.layerMapIcon3" horizon=0 vertical=0 da=0 time=50 nowait=true
@move_more layer=&"sf.layerMapIcon4" horizon=0 vertical=0 da=0 time=50 nowait=true
@stopse buf=&"tf.soundBudderActMapEnter"
@if exp="mp.target"
@sound storage="se心臓鼓動1回のみエコー軽"
; @sound storage="se心臓鼓動1回のみエコー軽+6db"
;@sound storage="seシリアス音2シュシュッ印象音イメージ音"
; @zoom layer=&"sf.layerTarget" time=50 storage="actTargetFrame2" src=&"'%d,%d,1284,1284,255'.sprintf(tf.cursorX-642,tf.cursorY-642)" dest=&"'%d,%d,64,64,255'.sprintf(tf.cursorX-32,tf.cursorY-32)"
; @wzoom canskip=true
; @zimage layer=&"sf.layerTarget" page=fore storage="actTargetFrame2b" visible=true opacity=255 left=&"tf.cursorX-128" top=&"tf.cursorY-128"
; @zmove layer=&"sf.layerTarget" page=fore time=50 path=&"'(%d,%d,0)'.sprintf(tf.cursorX-128,tf.cursorY-128)"
; @wm canskip=true
@endif
@wm canskip=true
@wm canskip=true
@wm canskip=true
@wm canskip=true
@wm canskip=true
@wm canskip=true
@wm canskip=true
@wm canskip=true
@wm canskip=true
@wm canskip=true
@wm canskip=true
@wm canskip=true
@stoptrans
@stopmove
@freeimage layer=&"sf.layerTarget" page=fore
; @eval exp="kag.fore.layers[sf.layerActDecorate].copyProcReset()"
@freeimage layer=&"sf.layerActDecorate" page=fore
@wf canskip=true
@rclick call=true storage="first.ks" target="*rclick" enabled=true
@endmacro
;----------------------------------------
;モードチェンジnovel
;モードチェンジadv
;モードチェンジcinema
;@gamemodechange type="novel"
;@gamemodechange type="adv"
;@gamemodechange type="cinema"
;----------------------------------------
@macro name="gamemodechange"
@if exp="mp.type=='novel'"
@eval exp="f.gamemode='novel'"
@eval exp="f.ch_frame_autoview_enabled=false"
@dm text="◆novelmode"
@position layer=message0 page=fore left=0 top=0 width=1280 height=720 frame='' color=0x000000 opacity=0 marginl=160 marginr=80 margint=45 marginb=0 visible=false
@position layer=message0 page=back left=0 top=0 width=1280 height=720 frame='' color=0x000000 opacity=0 marginl=160 marginr=80 margint=45 marginb=0 visible=false
@deffont size=30 face=user color=0xFAFAFA rubysize=10 rubyoffset=-2 shadow=true edge=true edgecolor=0x00000A shadowcolor=0x00000A bold=false
@defstyle linespacing=10 pitch=0
@resetfont
@eval exp="kag.darkWindowMenuItem.enabled=true"
@elsif exp="mp.type=='adv'"
@position layer=message0 page=fore left=0 top=600 width=1280 height=180 frame='' color=0x000000 opacity=0 marginl=160 marginr=80 margint=10 marginb=0 visible=false
@position layer=message0 page=back left=0 top=600 width=1280 height=180 frame='' color=0x000000 opacity=0 marginl=160 marginr=80 margint=10 marginb=0 visible=false
@deffont size=22 face=user color=0xFAFAFA rubysize=10 rubyoffset=-2 shadow=true edge=true edgecolor=0x00000A shadowcolor=0x00000A bold=true
@defstyle linespacing=10 pitch=0
@resetfont
@cm
@eval exp="f.gamemode='adv'"
@eval exp="f.ch_frame_autoview_enabled=true"
@dm text="◆advmode"
@eval exp="kag.darkWindowMenuItem.enabled=false"
@elsif exp="mp.type=='cinema'"
@eval exp="f.gamemode='cinema'"
@eval exp="f.ch_frame_autoview_enabled=false"
@dm text="◆cinemamode"
@eval exp="kag.darkWindowMenuItem.enabled=false"
@elsif exp="mp.type=='cinemadv'"
@eval exp="f.gamemode='cinemadv'"
@eval exp="f.ch_frame_autoview_enabled=false"
@dm text="◆cinema+adv mode"
@eval exp="kag.darkWindowMenuItem.enabled=false"
@endif
@endmacro
;----------------------------------------
;----------------------------------------
;@novelmode
;----------------------------------------
@macro name="novelmode"
@mapdisable layer=base page=fore
@mapdisable layer=base page=back
@gamemodechange type=novel
@delay speed=0
@endmacro
;----------------------------------------
;@advmode
;----------------------------------------
@macro name="advmode"
@gamemodechange type=cinemadv
@delay speed=user
@endmacro
;----------------------------------------
;@cinemamode
;----------------------------------------
@macro name="cinemamode"
@mapdisable layer=base page=fore
@mapdisable layer=base page=back
@gamemodechange type=cinema
@delay speed=user
@eval exp="kag.fore.messages[0].visible=false"
@endmacro
;----------------------------------------
;@page novelモード専用p
;----------------------------------------
@macro name="page_before"
@eval exp="mp.time=&sf.window_appear_time" cond="mp.time===void"
@ignore exp="mp.絶対時間"
@eval exp="mp.time= +mp.time * +sf.caption_time_ratio"
@endignore
@eval exp="mp.seloop=false" cond="mp.seloop===void"
@eval exp="mp.se2loop=false" cond="mp.se2loop===void"
@zimage layer=&sf.layerProgress page=fore storage="sysProgressBar" visible=true opacity=255 left=0 top=-2 index=1000001
@zimage layer=&sf.layerProgress page=back storage="sysProgressBar" visible=true opacity=255 left=0 top=-2 index=1000001
@if exp="f.gamemode=='novel'"
@sound storage=%se fadetime=%time loop=%seloop cond="mp.se!==void"
@zmove layer=&sf.layerProgress page=fore time=%time path="(0,0,255)"
@zmove layer=&sf.layerProgress page=back time=%time path="(0,0,255)"
@window visible=true clear=false time=%time
@wm canskip=true
@wm canskip=true
@sound storage=%se2 loop=%se2loop cond="mp.se2!==void"
@else
@sound storage=%se seloop=%seloop cond="mp.se!==void"
@endif
@endmacro
@macro name="page_p"
@if exp="f.gamemode=='novel'"
@eval exp="kag.historyLayer.reline()"
; ポーズをリセット
@eval exp="pauseSet(false)"
; ポーズを有効に
@eval exp="kag.pauseMenuItem.enabled=true"
; @eval exp="tf.waittime=kag.fore.messages[0].ch_call_count*sf.caption_char_wait_time"
@eval exp="tf.waittime=kag.messageTextLength*sf.caption_char_wait_time"
; @if exp="tf.waittime<2000"
; @eval exp="tf.waittime=2000"
; @endif
@eval exp="tf.waittime+=sf.voice_add_wait_time"
@eval exp="tf.waittime+=(+mp.waittime)" cond="mp.waittime!==void"
@zmove layer=&sf.layerProgress page=fore time=&"tf.waittime" path="(1280,0,255)" 絶対時間=true
@zmove layer=&sf.layerProgress page=back time=&"tf.waittime" path="(1280,0,255)" 絶対時間=true
@time_p time=&"tf.waittime"
@stopmove
; ポーズチェック
@if exp="f.pause && obj_timerp.result>0"
@eval exp="f.pause_waiting=true"
@p
@endif
; ポーズをリセット
@eval exp="kag.pauseMenuItem.enabled=false"
@eval exp="pauseSet(false)"
@else
@pp
@endif
@endmacro
@macro name="page_after"
@eval exp="mp.time=&sf.window_leave_time" cond="mp.time===void"
@eval exp="mp.clear=true" cond="mp.clear===void"
@ignore exp="mp.絶対時間"
@eval exp="mp.time= +mp.time * +sf.caption_time_ratio"
@endignore
@if exp="f.gamemode=='novel'"
@voicefade time=%time
@window visible=false time=%time
@wvoicefade
@cm cond="mp.clear"
@delay speed=0
@endif
@endmacro
@macro name="page"
@page_before *
@stable status=true
@page_p
@stable status=false
@page_after *
@endmacro
@macro name="novel_intermit"
@delay speed=%speed|100
@window visible=true clear=false time=10
@font color="0xFFFFD0"
@endmacro
;----------------------------------------
;▼ novel_r novelモード専用r
;----------------------------------------
@macro name="▼"
[r]
@eval exp="kag.historyLayer.reline()"
@endmacro
;↓ノベル用の空行
@macro name="novel_spacer"
@eval exp="for(var i=0;i<+mp.count;i++){kag.fore.messages[0].reline();}"
@endmacro
;----------------------------------------
;@paragraph
;----------------------------------------
@macro name="paragraph"
; @eval exp="kag.caption='%s:%s:%s'.sprintf(mp.prev,mp.current,mp.next)"
@eval exp="f.parag_prev=mp.prev"
@eval exp="f.parag_current=mp.current"
@eval exp="f.parag_next=mp.next"
@eval exp="f.parag_storage=kag.mainConductor.curStorage"
; @call storage="d_.ks" target=&"'*%s_%s'.sprintf(Storages.chopStorageExt(kag.mainConductor.curStorage),mp.current)"
@endif
; "前のシーンへ戻る(&P)"
@eval exp="kag.sceneRewindMenuItem.enabled=(mp.prev!='')"
; "現在のシーンをやり直す(&C)"
@eval exp="kag.sceneReplayMenuItem.enabled=(mp.current!='')"
; "次のシーンへ進む(&F)"
@eval exp="kag.sceneNextSkipMenuItem.enabled=(mp.next!='')"
@endmacro
;----------------------------------------
;sceneendと場面終了処理のラッパー
;----------------------------------------
;@暗転
@macro name=暗転
@sceneend *
@endmacro
;@幕
@macro name=幕
@sceneend *
@場面終了処理 *
@endmacro
;----------------------------------------
;グラフィック選択肢
;selection選択肢10.png/selection選択肢11.png/selection選択肢12.png ←ノーマル/押下/オンマウス
;selection選択肢20.png/selection選択肢21.png/selection選択肢22.png
;@グラフィック選択肢 _1="selection選択肢1" _2="selection選択肢2"
;*selection選択肢1
;*selection選択肢2
;----------------------------------------
;imagetop
;2:190,430
;3:130,310,490
;4:94,238,382,526
;----------------------------------------
@macro name="グラフィック選択肢"
@zimage layer=&sf.layerSelection1 page=fore storage=&"mp._1+'0'" visible=true opacity=255 left=0 top=720
@zimage layer=&sf.layerSelection2 page=fore storage=&"mp._2+'0'" visible=true opacity=255 left=0 top=720
@zimage layer=&sf.layerSelection3 page=fore storage=&"mp._3+'0'" visible=true opacity=255 left=0 top=720 cond="mp._3!==void"
@zimage layer=&sf.layerSelection4 page=fore storage=&"mp._4+'0'" visible=true opacity=255 left=0 top=720 cond="mp._4!==void"
@zmove layer=&sf.layerSelection1 page=fore time=100 path=&"'(0,%d,255)'.sprintf((mp._4!==void)? 94:(mp._3!==void)? 130:190)"
@sound storage="seシリアス音1シュッ印象音イメージ音"
@zmove layer=&sf.layerSelection2 page=fore time=200 path=&"'(0,%d,255)'.sprintf((mp._4!==void)? 238:(mp._3!==void)? 310:430)"
@if exp="mp._3!==void"
@sound storage="seシリアス音2シュシュッ印象音イメージ音"
@zmove layer=&sf.layerSelection3 page=fore time=300 path=&"'(0,%d,255)'.sprintf((mp._4!==void)? 382:490)"
@endif
@if exp="mp._4!==void"
@sound storage="seシリアス音4シューッ印象音イメージ音"
@zmove layer=&sf.layerSelection4 page=fore time=400 path="(0,526,255)"
@endif
@wm canskip=true
@wm canskip=true
@wm canskip=true
@wm canskip=true
@eval exp="tf.selection_1=mp._1"
@eval exp="tf.selection_2=mp._2"
@eval exp="tf.selection_3=mp._3"
@eval exp="tf.selection_4=mp._4"
@mapaction layer=base page=fore storage="selection.ma"
@if exp="mp._4!==void"
@mapimage layer=base page=fore storage="selection4_mapimage"
@elsif exp="mp._3!==void"
@mapimage layer=base page=fore storage="selection3_mapimage"
@else
@mapimage layer=base page=fore storage="selection2_mapimage"
@endif
@endmacro
;----------------------------------------
;グラフィック選択肢消去
;----------------------------------------
@macro name="グラフィック選択肢消去"
@mapdisable layer=base page=fore
@mapdisable layer=base page=back
@zbacklay
@freeimage layer=&sf.layerSelection1 page=back
@freeimage layer=&sf.layerSelection2 page=back
@freeimage layer=&sf.layerSelection3 page=back
@freeimage layer=&sf.layerSelection4 page=back
@ztrans method=crossfade time=300
@zwt canskip=true
@clearface
@endmacro
;----------------------------------------
;----------------------------------------
;----------------------------------------
;----------------------------------------
;@まわりを見る演出
;volumechange=false:ボリュームをいじりません
;@まわりを見る演出←ボタンによって呼び出された場合(通常の場合)はこれで
;@まわりを見る演出 volumechange=false se=false←作中、演出としてまわりを見る演出が欲しい場合
;----------------------------------------
@macro name="まわりを見る演出"
@eval exp="mp.volumechange=true" cond="mp.volumechange===void"
@eval exp="mp.se=true" cond="mp.se===void"
@eval exp="tf.currentまわりを見る番号=rrandom(4,9,tf.prevまわりを見る番号)"
@bgvfade time=500 cond="mp.volumechange"
@fadeout type=flash black=true time=500
@sound3 storage="se心臓鼓動特殊フェードイン3sec残りループ" loop=true cond="mp.se"
@背景 storage=&"'back公園%02d%s'.sprintf(rrandom(4,9,tf.currentまわりを見る番号),((random+0.5)\1)? '':'R')"
@zwt canskip=true
@wbgvfade cond="mp.volumechange"
@eval exp="setVolumeLimiterENV(1.0)" cond="mp.volumechange"
@eval exp="tf.prevまわりを見る番号=tf.currentまわりを見る番号"
@endmacro
;----------------------------------------
;@ミッション
;----------------------------------------
@macro name="ミッション"
@zwt canskip=true
@eval exp="mp.time=200" cond="mp.time===void"
@sound storage="seシリアス音1シュッ印象音イメージ音"
@eval exp="mp.x1=0" cond="mp.x1===void"
@eval exp="mp.y1=-100" cond="mp.y1===void"
@eval exp="mp.x2=0" cond="mp.x2===void"
@eval exp="mp.y2=0" cond="mp.y2===void"
@if exp="mp.from=='bottom'"
@eval exp="mp.y2=550"
@eval exp="mp.y1=650"
@endif
@if exp="mp.from=='right'"
@eval exp="mp.x1=1280"
@eval exp="mp.y1=0"
@eval exp="mp.x2=1080"
@endif
@if exp="mp.from=='left'"
@eval exp="mp.x1=-200"
@eval exp="mp.y1=0"
@eval exp="mp.x2=0"
@endif
@zimage layer=&sf.layerFace5 page=fore storage=%storage visible=true opacity=0 left=%x1 top=%y1
@zmove layer=&sf.layerFace5 page=fore time=%time path=&"'(%d,%d,255)'.sprintf(mp.x2,mp.y2)" accel=-2
@wm canskip=true
@endmacro
;----------------------------------------
;@ミッションクリア
;----------------------------------------
@macro name="ミッションクリア"
@いたずら終了
@layfree
@soundfadew time=50 special除外=true
;↓アクションシーンで、動画効果音がループ時に再生されなくなる不具合があります。初期化すると回避できるので、アクションシーンをクリアした瞬間に動画を初期化します
@eval exp="cinema_init()"
@eval exp="cinema_reduce()"
; @sound2 storage="seチャイムジングル・アタックキラララン高音"
@endmacro
;----------------------------------------
;@スマホ演出
;----------------------------------------
;↓古い奴
@macro name="スマホ"
@eval exp="mp.x1=0" cond="mp.x1===void"
@eval exp="mp.y1=720" cond="mp.y1===void"
@eval exp="mp.x2=0" cond="mp.x2===void"
@eval exp="mp.y2=0" cond="mp.y2===void"
@eval exp="mp.time=1000" cond="mp.time===void"
@eval exp="mp.frame=mp.storage" cond="mp.storage!==void"
@eval exp="mp.frame2=mp.storage2" cond="mp.storage2!==void"
@zimage layer=&sf.layerFace2 page=fore storage=%frame visible=true opacity=255 left=%x1 top=%y1
@zimage layer=&sf.layerFace page=fore storage=%frame2 visible=true opacity=128 left=%x1 top=%y1 mode=psoverlay
@zmove layer=&sf.layerFace2 page=fore time=%time path=&"'(%d,%d,255)'.sprintf(mp.x2,mp.y2)" accel=-2
@zmove layer=&sf.layerFace page=fore time=%time path=&"'(%d,%d,255)'.sprintf(mp.x2,mp.y2)" accel=-2
@wm canskip=true
@wm canskip=true
@eval exp="f.スマホ位置x1 = mp.x1"
@eval exp="f.スマホ位置y1 = mp.y1"
@eval exp="f.スマホ位置x2 = mp.x2"
@eval exp="f.スマホ位置y2 = mp.y2"
@eval exp="f.スマホフレーム = mp.frame"
@eval exp="f.スマホフレームバック = mp.frame2"
@endmacro
;----------------------------------------
;↓こっちを使って
;@スマホ#2 type=video storage="imgスマホev01_a01" x1=320 y1=720 x2=-176 y2=-112 mx=1365 my=415
;〜f:携帯の枠画像
;〜%:携帯のスクリーン画像
;〜p:カメラマーク フレーム画像内のどこに表示するかをmx,myで指定フレーム画像の左上を0,0とする。実際のスクリーン座標ではないので注意
;〜v:ビデオマーク
;〜v2:録画中のビデオマーク
;----------------------------------------
@macro name=スマホ#2
@eval exp="mp.time=1000" cond="mp.time===void"
@スマホ位置処理 *
@zimage layer=&sf.layerFace2 page=fore storage=&f.スマホフレーム visible=true opacity=255 left=&f.スマホ位置x1 top=&f.スマホ位置y1
@zimage layer=&sf.layerFace page=fore storage=&f.スマホスクリーン visible=true opacity=128 left=&f.スマホ位置x1 top=&f.スマホ位置y1 mode=psoverlay
@zimage layer=&sf.layerFace3 page=fore storage=&f.スマホマーク visible=true opacity=255 left=&f.スマホ位置mx1 top=&f.スマホ位置my1
@zmove layer=&sf.layerFace2 page=fore time=%time path=&"'(%d,%d,255)'.sprintf(f.スマホ位置x2,f.スマホ位置y2)" accel=-2
@zmove layer=&sf.layerFace page=fore time=%time path=&"'(%d,%d,255)'.sprintf(f.スマホ位置x2,f.スマホ位置y2)" accel=-2
@zmove layer=&sf.layerFace3 page=fore time=%time path=&"'(%d,%d,255)'.sprintf(f.スマホ位置mx2,f.スマホ位置my2)" accel=-2
@wm canskip=true
@wm canskip=true
@wm canskip=true
@endmacro
@macro name=スマホ位置処理
;スマホ#2 と同じパラメータを渡すと、変数に格納されます
@eval exp="mp.x1=0" cond="mp.x1===void"
@eval exp="mp.y1=720" cond="mp.y1===void"
@eval exp="mp.x2=0" cond="mp.x2===void"
@eval exp="mp.y2=0" cond="mp.y2===void"
@eval exp="mp.frame=mp.storage + 'f'"
@eval exp="mp.screen=mp.storage + '%'"
@eval exp="mp.camera=mp.storage + 'p'"
@eval exp="mp.video=mp.storage + 'v'"
@eval exp="mp.video2=mp.storage + 'v2'"
@eval exp="mp.mark=mp.camera" cond="mp.type=='camera'"
@eval exp="mp.mark=mp.video" cond="mp.type=='video'"
@eval exp="mp.mx1 = +mp.mx + +mp.x1"
@eval exp="mp.my1 = +mp.my + +mp.y1"
@eval exp="mp.mx2 = +mp.x2 - +mp.x1 + +mp.mx1"
@eval exp="mp.my2 = +mp.y2 - +mp.y1 + +mp.my1"
@eval exp="f.スマホ位置x1 = mp.x1"
@eval exp="f.スマホ位置y1 = mp.y1"
@eval exp="f.スマホ位置x2 = mp.x2"
@eval exp="f.スマホ位置y2 = mp.y2"
@eval exp="f.スマホ位置mx1 = mp.mx1"
@eval exp="f.スマホ位置my1 = mp.my1"
@eval exp="f.スマホ位置mx2 = mp.mx2"
@eval exp="f.スマホ位置my2 = mp.my2"
@eval exp="f.スマホマーク = mp.mark"
@eval exp="f.スマホフレーム = mp.frame"
@eval exp="f.スマホスクリーン = mp.screen"
@eval exp="f.スマホカメラ = mp.camera"
@eval exp="f.スマホビデオ = mp.video"
@eval exp="f.スマホ録画中 = mp.video2"
@eval exp="f.スマホタイプ = mp.type"
@endmacro
;----------------------------------------
;@撮影演出
;----------------------------------------
@macro name="スマホ写真撮影"
@sound storage="seカメラシャッター音"
@fadeout time=100
@wsound
; @face layer=&"sf.layerFace" storage=%storage opacity=255 pos="center" time=1000
;よく考えたら動画をロードだけして再生しなければ静止画じゃん
@動画 storage=%storage play=false
@endmacro
;----------------------------------------
;@録画演出
;----------------------------------------
@macro name="スマホ録画開始"
@sound storage="seスマートフォンスマホ録画開始"
@eval exp="mp.x=f.スマホ位置x2" cond="mp.x===void"
@eval exp="mp.y=f.スマホ位置y2" cond="mp.y===void"
@zimage layer=&sf.layerFace2 page=fore storage=%frame visible=true opacity=255 left=%x top=%y cond="mp.frame!==void"
@whiteout time=500
@動画 * storage=%storage filter="sysBackWhite" filteropacity=25 filtermode=psoverlay trans=false
@zimage layer=&"sf.layerFilter3" page=back storage="imgキャメラ録画中" visible=true opacity=255 left=1206 top=10
@ztrans method=crossfade time=500
@zwt canskip=true
@eval exp="f.スマホフレーム録画中 = mp.frame"
@endmacro
;----------------------------------------
@macro name="スマホ録画終了"
@eval exp="mp.time=500" cond="mp.time===void"
@whiteout time=%time
@動画 * storage=%storage trans=false
@eval exp="mp.time=1000" cond="mp.time===void"
@zimage layer=&sf.layerFace2 page=back storage=&"f.スマホフレーム録画中" visible=true opacity=255 left=&"f.スマホ位置x2" top=&"f.スマホ位置y2"
@zimage layer=&sf.layerFace page=back storage=&"f.スマホフレームバック" visible=true opacity=128 left=&"f.スマホ位置x2" top=&"f.スマホ位置y2" mode=psoverlay
@ztrans method=crossfade time=%time
@zwt canskip=true
@zwait time=100 canskip=true
@sound storage="seスマートフォンスマホ録画終了"
@zimage layer=&sf.layerFace2 page=fore storage=&"f.スマホフレーム" visible=true opacity=255 left=&"f.スマホ位置x2" top=&"f.スマホ位置y2"
@wsound
@zwait time=100 canskip=true
@zmove layer=&sf.layerFace2 page=fore time=%time path=&"'(%d,%d,255)'.sprintf(+f.スマホ位置x1,+f.スマホ位置y1)" accel=2
@zmove layer=&sf.layerFace page=fore time=%time path=&"'(%d,%d,255)'.sprintf(+f.スマホ位置x1,+f.スマホ位置y1)" accel=2
@wm canskip=true
@wm canskip=true
@freeimage layer=&sf.layerFace2 page=fore
@freeimage layer=&sf.layerFace page=fore
@endmacro
;----------------------------------------
@macro name="スマホ録画開始#2"
@eval exp="mp.frame=f.スマホフレーム"
@eval exp="mp.screen=f.スマホスクリーン"
@eval exp="mp.camera=f.スマホカメラ"
@eval exp="mp.video=f.スマホビデオ"
@eval exp="mp.video2=f.スマホ録画中"
@eval exp="mp.video2left=1206" cond="mp.video2left===void"
@eval exp="mp.video2top=10" cond="mp.video2top===void"
; @eval exp="mp.video2image='imgキャメラ録画中'" cond="mp.video2image===void"←これ要らない
@sound storage="seスマートフォンスマホ録画開始"
@eval exp="mp.x=f.スマホ位置mx2" cond="mp.x===void"
@eval exp="mp.y=f.スマホ位置my2" cond="mp.y===void"
@zimage layer=&sf.layerFace3 page=fore storage=%video2 visible=true opacity=255 left=%x top=%y
@if exp="mp.storage!==void"
@whiteout time=500
@動画 * storage=%storage filter="sysBackWhite" filteropacity=25 filtermode=psoverlay trans=false
@zimage layer=&"sf.layerFilter3" page=back storage=%video2image visible=true opacity=255 left=%video2left top=%video2top cond="mp.video2image!==void"
@zimage layer=&"sf.layerFilter2" page=back storage=%video3image visible=true opacity=255 left=%video3left top=%video3top cond="mp.video3image!==void"
@ztrans method=crossfade time=500
@zwt canskip=true
@else
@layopt layer=&sf.layerFace page=fore opacity=0 visible=true
@endif
@eval exp="f.スマホフレーム録画中 = mp.frame"
@endmacro
;----------------------------------------
@macro name="スマホ録画終了#2"
@eval exp="mp.frame=f.スマホフレーム"
@eval exp="mp.screen=f.スマホスクリーン"
@eval exp="mp.camera=f.スマホカメラ"
@eval exp="mp.video=f.スマホビデオ"
@eval exp="mp.video2=f.スマホ録画中"
@eval exp="mp.time=500" cond="mp.time===void"
@if exp="mp.storage!==void"
@whiteout time=%time
@動画 * storage=%storage trans=false
@else
@zbacklay
@endif
@eval exp="mp.time=1000" cond="mp.time===void"
;@zimage layer=&sf.layerFace2 page=fore storage=%frame visible=true opacity=255 left=%x1 top=%y1
;@zimage layer=&sf.layerFace page=fore storage=%screen visible=true opacity=128 left=%x1 top=%y1 mode=psoverlay
;@zimage layer=&sf.layerFace3 page=fore storage=%mark visible=true opacity=255 left=%mx1 top=%my1
@zimage layer=&sf.layerFace2 page=back storage=&"f.スマホフレーム" visible=true opacity=255 left=&"f.スマホ位置x2" top=&"f.スマホ位置y2" cond="f.スマホフレーム!==''"
@zimage layer=&sf.layerFace page=back storage=&"f.スマホスクリーン" visible=true opacity=128 left=&"f.スマホ位置x2" top=&"f.スマホ位置y2" mode=psoverlay cond="f.スマホスクリーン!==''"
@zimage layer=&sf.layerFace3 page=back storage=&"f.スマホ録画中" visible=true opacity=255 left=&"f.スマホ位置mx2" top=&"f.スマホ位置my2" cond="f.スマホ録画中!==''"
@ztrans method=crossfade time=%time
@zwt canskip=true
@zwait time=100 canskip=true
@sound storage="seスマートフォンスマホ録画終了"
@zimage layer=&sf.layerFace3 page=fore storage=&"f.スマホビデオ" visible=true opacity=255 left=&"f.スマホ位置mx2" top=&"f.スマホ位置my2" cond="f.スマホビデオ!==''"
@wsound
@zwait time=100 canskip=true
@zmove layer=&sf.layerFace2 page=fore time=%time path=&"'(%d,%d,255)'.sprintf(+f.スマホ位置x1,+f.スマホ位置y1)" accel=2
@zmove layer=&sf.layerFace page=fore time=%time path=&"'(%d,%d,255)'.sprintf(+f.スマホ位置x1,+f.スマホ位置y1)" accel=2
@zmove layer=&sf.layerFace3 page=fore time=%time path=&"'(%d,%d,255)'.sprintf(+f.スマホ位置mx1,+f.スマホ位置my1)" accel=2
@wm canskip=true
@wm canskip=true
@wm canskip=true
@freeimage layer=&sf.layerFace2 page=fore
@freeimage layer=&sf.layerFace page=fore
@freeimage layer=&sf.layerFace3 page=fore
@endmacro
;----------------------------------------
;@リンゴフェードアウト
;----------------------------------------
@macro name=リンゴフェードアウト
@画面無力化
@sound storage="seベルツリー鈴鐘シャラララララン上がる"
@zimage layer=&sf.layerBlind page=fore storage="fadeoutApple#2" visible=true opacity=255 left=0 top=-2271
@zmove layer=&sf.layerBlind page=fore time=1000 path="(0,0,255)"
@wm canskip=true
@eval exp="mp.storage='sysBackTitle2'" cond="mp.storage===void"
@場面終了処理 storage=%storage
@zwait time=%waittime|1000 canskip=true
@eval exp="tf.actscene_firstin=true"
@endmacro
;----------------------------------------
;@フィルター(今ある画面にフィルターだけかけます)
;----------------------------------------
@macro name=フィルター
@eval exp="mp.layer=(string)sf.layerFilter" cond="mp.layer===void"
@eval exp="mp.storage='sysBackWhite'" cond="mp.storage===void"
@eval exp="mp.left=0" cond="mp.left===void"
@eval exp="mp.top=0" cond="mp.top===void"
@eval exp="mp.opacity=128" cond="mp.opacity===void"
@eval exp="mp.mode='psdodge5'" cond="mp.mode===void"
@eval exp="mp.time=500" cond="mp.time===void"
@if exp="mp.type=='white'"
@eval exp="mp.storage='sysBackWhite'"
@eval exp="mp.mode='psdodge5'"
@eval exp="mp.opacity=64"
@endif
@zimage layer=%layer page=fore storage=%storage visible=true opacity=0 left=%left top=%top mode=%mode
@zmove layer=%layer page=fore time=%time path=&"'(%d,%d,%d)'.sprintf(mp.left,mp.top,mp.opacity)"
@wm canskip=true
@endmacro
@macro name=フィルター解除
@eval exp="mp.layer=(string)sf.layerFilter" cond="mp.layer===void"
@eval exp="mp.left=0" cond="mp.left===void"
@eval exp="mp.top=0" cond="mp.top===void"
@eval exp="mp.time=500" cond="mp.time===void"
@zmove layer=%layer page=fore time=%time path=&"'(%d,%d,0)'.sprintf(mp.left,mp.top)"
@wm canskip=true
@freeimage layer=%layer page=fore
@endmacro
;----------------------------------------
;@遊具を見る演出
;----------------------------------------
@macro name=遊具を見る演出
@eval exp="mp.time=500" cond="mp.time===void"
@zimage layer=&sf.layerFilter page=fore storage="sysBackWhite" visible=true opacity=0 left=0 top=0 mode=psdodge5
@sound storage="seズームイン、集中、収束、集まるしゅうぅぅ倍速"
@bgvfade time=%time
@envfade time=%time
;↓actsceneでsound3の音を鳴らしていたのでそれを切ります
@soundfade buf=&sf.sebuf_se3
@zmove layer=&sf.layerFilter page=fore time=%time path="(0,0,64)"
@wm canskip=true
@wsoundfade buf=&sf.sebuf_se3
@wenvfade
@wbgvfade
@eval exp="kag.movies[kag.fore.layers[sf.layerMovie]._video_slot].pause()"
@endmacro
;----------------------------------------
;----------------------------------------
;----------------------------------------
;----------------------------------------
@macro name="名字"
; @font color="0xD0FFD0"
@if exp="mp.text===void"
@emb exp="sf.名字"
@else
@emb exp="mp.text"
@endif
@resetfont
@endmacro
@macro name="名前"
; @font color="0xD0FFFF"
@if exp="mp.text===void"
@emb exp="sf.名前"
@else
@emb exp="mp.text"
@endif
@resetfont
@endmacro
@macro name="年齢"
; @font color="0xD0D0FF"
@if exp="mp.text===void"
@emb exp="sf.年齢"
@else
@emb exp="mp.text"
@endif
@resetfont
@endmacro
;----------------------------------------
;システムボタン
;----------------------------------------
@macro name="sysbtn"
@ignore exp="typeof global.systembutton_object == 'undefined'"
@eval exp="systembutton_object.setOptions(%[forevisible:mp.visible,backvisible:mp.visible])"
@endignore
@endmacro
;----------------------------------------
;----------------------------------------
;----------------------------------------
;----------------------------------------
*system_initialize
;まずシステムで初期化処理が必要なときはここに
@resetfont
@paragraph
;brandlogo
@jump target="*brandlogo_end" cond="debugmode"
*brandlogo
@call storage="brand.ks"
*brandlogo_end
;----------------------------------------
*caution
@if exp="!debugmode"
@call target=*注意事項 storage=g5sCommon.ks
@幕 type=flash white=true time=1000
@call target=*プレイ前の注意 storage=g5sCommon.ks
@endif
*title_return_point_pre
@if exp="debugmode"
@場面終了処理 time=100 white=true forced=true
@else
@場面終了処理 time=1000 white=true forced=true
@endif
@jump target="*normal_return_point"
;----------------------------------------
*title_return_point
;タイトルに戻るでここに戻ってきます
;---------------------------------------
;途中で帰還したときのための処理
@sound storage="seヒュンシリアス"
@場面終了処理 time=2000 white=true forced=true
@erasebookmark place=0
*normal_return_point
;それ以外に普通に戻すときはこっちへ
@cancelskip
@cancelautomode
@clickskip enabled=true
@nextskip enabled=false
@automode enabled=false
;@startanchor enabled=false
@stable status=false
@store enabled=false
@rclick enabled=false
;----------------------------------------
@iscript
f.scenename = '';
@endscript
;----------------------------------------
@eval exp="tf['scenemode']=false"
@eval exp="TitleReturnPosSet('タイトルへ戻る(&T)','first.ks','*title_return_point')"
;---------------------------------------
@paragraph
;---------------------------------------
*game_variable_initialize
;毎タイトルごとに更新されます
;----------------------------------------
;ゲームの変数など
@iscript
f.dramavolume = 1.0;
sf.dramavolume_default = 1.0;
tf.scenemode = 0;
f.demomode = false;
f.return_start_label = ''; //シーンの最初に戻るで戻るラベル
f.return_start_storage = ''; //シーンの最初に戻るで戻るラベル
f.return_select_label = '*return_point'; //シーン選択に戻るで戻るラベル
f.return_select_storage = 'g5sCommon.ks'; //シーン選択に戻るで戻るラベル
kag.goToSceneSelectMenuItem.enabled = true;
kag.goToSceneStartMenuItem.enabled = false;
// kag.sceneReplayMenuItem.enabled = false;
f.scenarioperforming = false; //scenariobegin〜endの間trueになります。つまりゲーム中を意味しています。タイトル画面などではfalseになります。字幕を消すためのフラグとして処理します。旧名f.hscenemode
f.bgm_h_flag = false; //bgm_hでtrueになります。hシーンのときだけbgmを消せる用です画面終了処理、scenarioendでfalseになります
f.messagemode=sf.messagemode; //メッセージウィンドウのモードです。sf〜変数にも同じ物があります。0:グラフィック,1:ノベル
f.scene_counter=0; //シナリオの最初で0に[section]でインクリメント、シーン番号埋め込むのめんどいから自動化
f.loopanime_replaycount=0; //繰り返しに入ったらインクリメントしていきます
f.loopend_waiting=false; //アニメシーンのラストでクリック待ちしている間はtrueになります
f.looparea_startlabel = ''; //ループするラベル名
f.looparea_endlabel = ''; //ループが終わったら飛ぶラベル名
f.hscene_bgm=''; //HシーンのBGM名を保持する変数指定により鳴らさないことがあるので、ファイル名だけ保存しておきます
function onMessagemodeChange()
{
//ウィンドウモードによってメニューを変える処理
//kag.autoModeMenuItem.enabled=(f.messagemode==1);
//kag.autoModeMenuItem.visible=(f.messagemode==1);
//kag.skipToNextStopMenuItem.enabled=(f.messagemode==1);
//kag.skipToNextStopMenuItem.visible=(f.messagemode==1);
//kag.characterMenu.enabled=(f.messagemode==1);
//kag.characterMenu.visible=(f.messagemode==1);
kag.chAntialiasMenuItem.visible=(f.messagemode==1);
kag.chAntialiasMenuItem.enabled=(f.messagemode==1);
kag.chChangeFontMenuItem.visible=(f.messagemode==1);
kag.chChangeFontMenuItem.enabled=(f.messagemode==1);
//kag.rightClickMenuItem.visible=(f.messagemode==1);
//kag.rightClickMenuItem.enabled=(f.messagemode==1);
// kag.showHistoryMenuItem.visible=(f.messagemode==1);
// kag.showHistoryMenuItem.enabled=(f.messagemode==1);
//kag.chSpeedMenu.visible=(f.messagemode==1);
//kag.chSpeedMenu.enabled=(f.messagemode==1);
//kag.autoModeWaitMenu.visible=(f.messagemode==1);
//kag.autoModeWaitMenu.enabled=(f.messagemode==1);
}
onMessagemodeChange();
f.captionChara = ''; //今誰の字幕を表示しているのかを保持する変数
f.captionviewed = false; //talkで字幕を表示したときにtrueになります endtalkでwaitするかを判断するためのものです sf.captionviewとは別物です
if(f.actionflag===void) f.actionflag=%[];
var act = f.actionflag;
if(sf.gameflag===void) sf.gameflag=%[]; //各シナリオを通じて共通のフラグ
if(sf.gameflag['素股']===void) sf.gameflag['素股']=false;
if(sf.gameflag['淫乱']===void) sf.gameflag['淫乱']=false;
if(sf.gameflag['初体験']===void) sf.gameflag['初体験']=false;
if(f.sceneflag===void) f.sceneflag=[]; //各シナリオ内だけでのフラグ
var flag = f.sceneflag;
//前のシーンへ、シーンをやり直す、次のシーンへ これら用のフラグ
f.parag_prev = "";
f.parag_current = "";
f.parag_next = "";
//個別のdramavolume
setVolumeLimiterENV(0.8); //まわりを見る演出のために制限掛けておきます
//actsceneにはじめて入る
tf.actscene_firstin=true;
f.環境音type=void; //その都合により環境音のtypeを保存しないといけない
//commonで使う
if(sf.entervoice===void) sf.entervoice=-1;
@endscript
;----------------------------------------
*debug_pre
;=======================================
;debug前処理
@jump target="*debug_end" cond="!debugmode"
*debug
;debug エリア
@jump storage="test.ks"
*debug_end
;デバッグここまで
;----------------------------------------
*load
;オートセーブデータがあったらロードするよ
;@load place=0 ask=false cond="Storages.isExistentStorage(kag.getBookMarkFileNameAtNum(0))"
*start
@jump storage="title.ks" target="*0"
*rclick
@eval exp="onCaptionHideMenuItem(kag.captionHideMenuItem)"
@return
;*シーンジャンプ
;[r][r][r]
;@場面終了処理 time=1000
;@iscript
;f.scene_counter--;
;if(f.scene_counter<0) f.scene_counter=0;
;@endscript
;@jump storage=&"f.return_start_storage" target=&"'*%s_%02d'.sprintf(Storages.chopStorageExt(f.return_start_storage),f.scene_counter+1)"
;[s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s][s]
*シーンジャンプ
@場面終了処理 time=200 rule=&"tf.scenejump_rule"
[r][r][r]
@jump storage=&"tf.scenejump_storage" target=&"tf.scenejump_target"
@sss