shiny-cuty-excel-chiffon/data/macrodefine.ks

2149 lines
122 KiB
Text


;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
;マクロの設定
[macro name=malename]
[if exp="f.stage==2"]
[if exp="+mp.num==99"]
[face storage="f_o001"]
[if exp="sf.language==En"]
[n]Schoolboys[/n]
[elsif exp="sf.language==Tw"]
【男子們】
[elsif exp="sf.language==Cn"]
【男生们】
[else]
【男子達】
[endif]
[else]
[face storage=&("f_o00"+((+mp.num-1)%4+1))]
[if exp="sf.language==En"]
[n]Schoolboy [emb exp= mp.num][/n]
[elsif exp="sf.language==Cn"]
【男生[emb exp= han2zen(mp.num)]】
[else]
【男子[emb exp= han2zen(mp.num)]】
[endif]
[endif]
[else]
[if exp="+mp.num==99"]
[face storage="f_n001"]
[if exp="sf.language==En"]
[n]The Men[/n]
[elsif exp="sf.language==Tw"]
【男人們】
[elsif exp="sf.language==Cn"]
【男人们】
[else]
【男達】
[endif]
[else]
[face storage=&("f_n00"+((+mp.num-1)%3+1))]
[if exp="sf.language==En"]
[n]Man [emb exp= mp.num][/n]
[else]
【男[emb exp= han2zen(mp.num)]】
[endif]
[endif]
[endif]
[endmacro]
[macro name=n]
[ExecAfterLoad2 cond="tf.afterLoad2==true"]
[eval exp="tf.tmp1=gaiji[1].storage[kag.fore.messages[1].antialiased]"]
[eval exp="tf.tmp2=gaiji[1].alt"]
[if exp="kag.getCurrentRead()&&kag.changeColorAlreadyReadText&&!f.nowExecKaisou"]
[graph storage=&tf.tmp1 alt=&tf.tmp2 color=0x00ffff yoffset=-2]
[else]
[graph storage=&tf.tmp1 alt=&tf.tmp2 color=0xffffff yoffset=-2]
[endif]
[endmacro]
[macro name=/n]
[eval exp="tf.tmp1=gaiji[2].storage[kag.fore.messages[1].antialiased]"]
[eval exp="tf.tmp2=gaiji[2].alt"]
[if exp="kag.getCurrentRead()&&kag.changeColorAlreadyReadText&&!f.nowExecKaisou"]
[graph storage=&tf.tmp1 alt=&tf.tmp2 color=0x00ffff yoffset=-2]
[else]
[graph storage=&tf.tmp1 alt=&tf.tmp2 color=0xffffff yoffset=-2]
[endif]
[endmacro]
[macro name=q]
[emb exp="'#'"]
[endmacro]
[macro name=/q]
[emb exp="'#'"]
[endmacro]
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
[macro name=elseif]
[elsif]
[endmacro]
[macro name=DisableClick]
[eval exp="kag.fore.base.disabledInTrans=true"]
[eval exp="kag.back.base.disabledInTrans=true"]
[endmacro]
[macro name=EnableClick]
[eval exp="kag.fore.base.disabledInTrans=false"]
[eval exp="kag.back.base.disabledInTrans=false"]
[endmacro]
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
;改行、キー待ちのマクロ設定
[macro name=CR]
[r]
[endmacro]
[macro name=CR2]
[history output=false]
[r]
[history output=true]
[endmacro]
[macro name=ExecAfterLoad]
; [if exp="tf.defeated"]
; [DeleteDho]
; [eval exp="tf.defeated = false"]
; [endif]
[eval exp="pio.enabled=false"]
; [if exp="f.nowPlayingEventMovie==''"]
; ;ロード後にアヘ顔だの何だのがコンフィグの設定通りになるようにする
; [if exp="f.nowShowingCg != ''"]
; [eval exp="tf.cg = getCgName(f.nowShowingCg)"]
; [image storage=&tf.cg page=back layer=base]
; [image storage=&tf.cg page=fore layer=base]
; [endif]
; [else]
; [eval exp="kag.movies[!f.nowForeSlot].audioVolume=0"]
; [eval exp="kag.movies[f.nowForeSlot].audioVolume=f.volumeMatrix[sf.seVolume]*1000"]
; [eval exp="kag.movies[f.nowForeSlot].audioVolume=0" cond="sf.seMute==1"]
; [if exp="sf.effectMovieMode==0"]
; [if exp="kag.movies[0].lastStatus=='play'"]
; [wait time=100 cond="sf.effectMovieMode==0"]
; [pausevideo slot=0 cond="sf.effectMovieMode==0"]
; [endif]
; [endif]
; [endif]
;
; ;ロード後にコスがコンフィグの設定通りになるようにする
; [if exp="f.orgChara0 != ''"]
; [image layer=0 page=fore storage=&getCharaFileName(f.orgChara0)]
; [image layer=0 page=back storage=&getCharaFileName(f.orgChara0)]
; [endif]
; [if exp="f.orgChara1 != ''"]
; [image layer=1 page=fore storage=&getCharaFileName(f.orgChara1)]
; [image layer=1 page=back storage=&getCharaFileName(f.orgChara1)]
; [endif]
; [if exp="f.orgChara2 != ''"]
; [image layer=2 page=fore storage=&getCharaFileName(f.orgChara2)]
; [image layer=2 page=back storage=&getCharaFileName(f.orgChara2)]
; [endif]
; [eval exp="tf.disableSave = 0"]
; [eval exp="kag.quickSaveMenuItem.enabled = true"]
; [eval exp="systembutton_object.foreButtons[systembutton_object.btnSave].visible = true"]
; [eval exp="systembutton_object.backButtons[systembutton_object.btnSave].visible = true"]
[if exp="f.inHScene&&!f.inHScene2"]
[if exp="sf.showExtasyCount==1"]
[eval exp="kag.foreExtasyCountLayer.show()"]
[eval exp="kag.backExtasyCountLayer.show()"]
[else]
[eval exp="kag.foreExtasyCountLayer.hide()"]
[eval exp="kag.backExtasyCountLayer.hide()"]
[endif]
[endif]
[if exp="f.nowExecKaisou"]
[eval exp="kag.goBackMenuItem.visible = true"]
[else]
[eval exp="kag.goBackMenuItem.visible = false"]
[endif]
[eval exp="setSystemButton()"]
[eval exp="tf.windowVisible = true"]
;音量セット
[call storage=configmenu.ks target=*setVolume]
[eval exp="mp.bgmStorage = kag.bgm.playingStorage.substring(0, 4)"]
[if exp="mp.bgmStorage == 'stag' || mp.bgmStorage == 'boss'"]
[fadebgm time=500 volume=80]
[endif]
[eval exp="tf.afterLoad=false"]
[playse buf=2 storage="dummy" cond="kag.bgVoice[0]!='' && (f.ボイス再生行==0 || +f.voicePlayBuf!=2) && kag.se[4].status!='play'"]
[playse buf=5 storage="dummy" cond="kag.bgVoice[1]!='' && (f.ボイス再生行==0 || +f.voicePlayBuf!=5) && kag.se[6].status!='play'"]
[endmacro]
[macro name=ExecAfterLoad2]
[eval exp="kag.chDefaultFace = fontList[sf.language]"]
[eval exp="kag.setMessageLayerUserFont()"]
[resetfont]
[sethistfont]
; [eval exp="setMarginLMatrix()"]
[position layer=message1 marginl=&"marginL[tf.faceOpt]"]
[move page=fore layer=message4 time=250 path=(0,0,0)]
[wm canskip=false]
[eval exp="tf.afterLoad2=false"]
[endmacro]
[macro name=KeyWait]
[endindent]
[resethistfont]
;ロード直後の処理
[ExecAfterLoad cond="tf.afterLoad==true"]
[eval exp="tf.automodeflag=kag.autoMode"]
[eval exp="tf.currentLabelName = kag.currentLabel"]
;未読部分でスキップをキャンセル
[cancelskip cond="kag.skipMode == 4 && sf.skipOnlyAlreadyRead == 1 && !kag.getCurrentRead() && !kag.skipKeyRepressed && !f.nowExecKaisou"]
;オート時の待ち
[if exp="kag.autoMode"]
[eval exp="tf.waitTime = int( kag.textLength * kag.autoModeLineWait / 10 )"]
[eval exp="tf.waitTime2 = 0"]
[if exp="!tf.disableSound"]
[eval exp="tf.waitTime2 = int(( tf.voiceTime * kag.textLength / kag.toNextTextTotalCount) - kag.textLength * kag.userChSpeed)" cond="tf.voiceTime!==void"]
[endif]
[if exp="sf.waitVoiceEndInAutoMode==1"]
[if exp="f.nowVoiceLine==1 && !tf.disableSound"]
[ws buf=&f.voicePlayBuf canskip=true cond="f.voicePlayFlag==1"]
[wait canskip=true time=&tf.waitTime cond="f.voicePlayFlag==0"]
[else]
[wait canskip=true time=&tf.waitTime]
[endif]
[else]
[wait canskip=true time=&tf.waitTime cond="tf.waitTime >= tf.waitTime2"]
[wait canskip=true time=&tf.waitTime2 cond="tf.waitTime < tf.waitTime2"]
[endif]
[endif]
; [eval exp ="dm('オートプレイ待ち時間 : ' + kag.textLength + ' / ' + kag.toNextTextTotalCount)"]
;クリック待ち
[eval exp="tf.nowKeyWait=1"]
; [eval exp="kag.isExistentVoiceInNext=0"]
[l]
[eval exp="tf.nowKeyWait=0"]
[eval exp="kag.current.hideIndicatorLayer()"]
;最初にオートになったときの待ち
[if exp="kag.autoMode && tf.automodeflag==0"]
[eval exp="tf.waitTime = int( kag.textLength * kag.autoModeLineWait / 10 )"]
[eval exp="tf.waitTime2 = 0"]
[if exp="!tf.disableSound"]
[eval exp="tf.waitTime2 = int(( tf.voiceTime * kag.textLength / kag.toNextTextTotalCount) - kag.textLength * kag.userChSpeed)" cond="tf.voiceTime!==void"]
[endif]
[if exp="sf.waitVoiceEndInAutoMode==1"]
[if exp="f.nowVoiceLine==1"]
[ws buf=&f.voicePlayBuf canskip=true cond="f.voicePlayFlag==1"]
[wait canskip=true time=&tf.waitTime cond="f.voicePlayFlag==0"]
[else]
[wait canskip=true time=&tf.waitTime]
[endif]
[else]
;[eval exp="dm('kag.textLength : ' + kag.textLength + ' / kag.toNextTextTotalCount : ' + kag.toNextTextTotalCount)"]
;[eval exp="dm('tf.waitTime : ' + tf.waitTime + ' / tf.waitTime2 : ' + tf.waitTime2)"]
;[eval exp="dm('tf.voiceTime : ' + tf.voiceTime + ' / buffer position : ' + kag.se[f.voicePlayBuf].position)"]
[eval exp="tf.waitTime -= kag.se[f.voicePlayBuf].position"]
[eval exp="tf.waitTime = 0" cond="tf.waitTime < 0"]
[eval exp="tf.waitTime2 -= kag.se[f.voicePlayBuf].position"]
[eval exp="tf.waitTime2 = 0" cond="tf.waitTime2 < 0"]
;[eval exp="dm('tf.waitTime : ' + tf.waitTime + ' / tf.waitTime2 : ' + tf.waitTime2)"]
[if exp="!f.nowVoiceLine || kag.se[f.voicePlayBuf].status=='play'"]
[wait canskip=true time=&tf.waitTime cond="tf.waitTime >= tf.waitTime2"]
[wait canskip=true time=&tf.waitTime2 cond="tf.waitTime < tf.waitTime2"]
[endif]
[endif]
[endif]
[eval exp="f.nowVoiceLine=0"]
[stopse buf=&f.voicePlayBuf cond="sf.voiceStopAtClick == 1"]
[r][ct][r][ct]
[label]
; [ExecAfterLoad2 cond="tf.afterLoad2==true"]
[eval exp="f.ボイス再生行 = 0"]
[eval exp="kag.textLength=0"]
[eval exp="tf.currentLabelName = void"]
[current layer="message1"]
[sethistfont]
[endmacro]
[macro name=KeyWaitStay]
[ws buf=&f.voicePlayBuf canskip=true cond="kag.autoMode&&f.nowVoiceLine==1"]
[l]
[stopse buf=&f.voicePlayBuf cond="sf.voiceStopAtClick==1&&f.nowVoiceLine==1"]
[endmacro]
;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
;外字
[iscript]
class GaijiClass{
var alt;
var storage = new Array();
function GaijiClass(t, s1, s2){
alt = t;
storage[0] = s1;
storage[1] = s2;
}
function finalize(){
invalidate storage;
}
}
var gaiji = new Array();
gaiji[0] = new GaijiClass("①", "char1a", "char1b");
gaiji[1] = new GaijiClass("②", "char2a", "char2b");
gaiji[2] = new GaijiClass("③", "char3a", "char3b");
gaiji[3] = new GaijiClass("④", "char4a", "char4b");
[endscript]
[macro name=hearts]
[eval exp="tf.tmp1=gaiji[0].storage[kag.fore.messages[1].antialiased]"]
[eval exp="tf.tmp2=gaiji[0].alt"]
[if exp="kag.getCurrentRead()&&kag.changeColorAlreadyReadText&&!f.nowExecKaisou"]
; [font color="0x00ffff"][graph storage=&tf.tmp1 alt=&tf.tmp2][resetfont]
[graph storage=&tf.tmp1 alt=&tf.tmp2 color=0x00ffff]
[else]
[graph storage=&tf.tmp1 alt=&tf.tmp2 color=0xffffff]
[endif]
[endmacro]
[macro name=note]
[eval exp="tf.tmp1=gaiji[3].storage[kag.fore.messages[1].antialiased]"]
[eval exp="tf.tmp2=gaiji[3].alt"]
[if exp="kag.getCurrentRead()&&kag.changeColorAlreadyReadText&&!f.nowExecKaisou"]
; [font color="0x00ffff"][graph storage=&tf.tmp1 alt=&tf.tmp2][resetfont]
[graph storage=&tf.tmp1 alt=&tf.tmp2 color=0x00ffff]
[else]
[graph storage=&tf.tmp1 alt=&tf.tmp2 color=0xffffff]
[endif]
[endmacro]
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
;インデントのエイリアス
[macro name=i]
[locate x=12 cond="sf.language==En"]
[indent]
[ExecAfterLoad2 cond="tf.afterLoad2==true"]
[endmacro]
[macro name=/i]
[endindent]
[eval exp="kag.fore.messages[1].lineLayerPos+=4" cond="sf.language==En"]
[endmacro]
;―――――――――――――――――――――――――――――
;地の文表示
[macro name=text]
[ExecAfterLoad2 cond="tf.afterLoad2==true"]
[history output=false]
[r]
[history output=true]
[if exp="sf.language==En"]
[locate x=12]
[eval exp="storeHistory(' ')"]
[else]
[eval exp="tf.w = kag.fore.messages[1].lineLayer.font.getTextWidth('「')"]
[locate x=&(tf.w)]
[eval exp="storeHistory(' ')"]
[endif]
[i]
[endmacro]
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
[macro name=SetMessageWindow]
[backlay]
[layopt layer=message3 page=back visible=false]
[position layer=message0 page=back visible=false left=0 top=574 marginl=0 margint=0 frame="messagewindow1"]
[eval exp="mp.marginL = marginL[0]"]
[position layer=message1 page=fore visible=false left=0 top=574 marginl=&mp.marginL margint=6 marginr=230 frame="messagewindow2"]
[position layer=message1 page=back visible=false left=0 top=574 marginl=&mp.marginL margint=6 marginr=230 frame="messagewindow2"]
[position layer=message2 page=back visible=false left=200 top=585 marginl=0 margint=0 height=136 opacity=0]
[position layer=message3 page=back visible=true left=0 top=0 marginl=0 margint=0 frame="" opacity=0]
[current page=fore layer="message1"]
[endmacro]
[iscript]
function setSystemButton(){
if(kag.historyOfStore2.count==0){
global.systembutton_object.backButtonSetUnabled();
}else{
global.systembutton_object.backButtonSetEnabled();
}
// if(tf.runFromCD){
// global.systembutton_object.buttonEnabled[0] = false;
// global.systembutton_object.buttonEnabled[1] = false;
// }else{
// global.systembutton_object.buttonEnabled[0] = true;
// global.systembutton_object.buttonEnabled[1] = true;
// }
var flag = true;
if(f.skipCondExp !== void) flag = Scripts.eval(f.skipCondExp);
if((f.skipTarget != "" && sf.scenarioPass[f.skipTarget] && flag) || f.nowExecKaisou || tf.defeated){
global.systembutton_object.nextButtonSetEnabled();
}else{
global.systembutton_object.nextButtonSetDisabled();
}
}
function resetPadKeyRepeat(){
for(var i=0; i<global.gpp.padInputs.count; i++){
var ip = global.gpp.padInputs[i];
if(ip !== void && isvalid ip){
ip.repeatCount = -30;
}
}
}
[endscript]
;システムボタン表示
[macro name=SysBtnOn]
[backlay]
[sysbtopt backvisible=true]
[eval exp="setSystemButton()"]
[trans method=crossfade time=100]
[wt]
[endmacro]
;システムボタン非表示
[macro name=SysBtnOff]
[backlay]
[sysbtopt backvisible=false]
[eval exp="setSystemButton()"]
[trans method=crossfade time=100]
[wt]
[endmacro]
;―――――――――――――――――――――――――――――
;メッセージウィンドウとシステムボタン消去
[macro name=WindowOff]
[eval exp="tf.windowVisible = false"]
[fadebgm time=1000 volume=100 cond="!kag.bgm.currentBuffer.inFadeAndStop"]
[eval exp="kag.quickSaveMenuItem.enabled=false"]
[FaceOff]
[eval exp="tf.tmp=kag.rightClickEnabled"]
[rclick enabled=false]
[backlay]
[sysbtopt backvisible=false cond="!(mp.sysbuttonstay!==void && +mp.sysbuttonstay==true)"]
[layopt layer=message0 page=back visible=false]
[layopt layer=message1 page=back visible=false]
[layopt layer=message2 page=back visible=false]
[trans method=crossfade time=250 cond="(mp.time==void)&&(sf.effectFade==1)"]
[trans method=crossfade time=%time cond="(mp.time!=void)&&(sf.effectFade==1)"]
[trans method=crossfade time=0 cond="sf.effectFade==0"]
[wt]
[rclick enabled=&tf.tmp]
[resethistfont]
[endmacro]
[macro name=WindowOn]
[eval exp="mp.bgmStorage = kag.bgm.playingStorage.substring(0, 4)"]
[if exp="mp.nobgmfade === void || +mp.nobgmfade == 0"]
[if exp="mp.bgmStorage == 'stag' || mp.bgmStorage == 'boss'"]
[fadebgm time=500 volume=80]
[elsif exp="!kag.bgm.currentBuffer.inFadeAndStop"]
[fadebgm time=500 volume=100]
[endif]
[endif]
[eval exp="systembutton_object.setHint()"]
[eval exp="bao.fukidashi.clear()"]
[WindowOnBottom time=%time|250 * cond="f.windowTopNow==0"]
[WindowOnTop time=%time|250 * cond="f.windowTopNow==1"]
[eval exp="resetPadKeyRepeat()"]
[eval exp="tf.windowVisible = true"]
[endmacro]
[macro name=WindowOn2]
[ClearHistory]
[WindowOnBottom time=%time|250 * cond="f.windowTopNow==0"]
[WindowOnTop time=%time|250 * cond="f.windowTopNow==1"]
[eval exp="resetPadKeyRepeat()"]
[eval exp="tf.windowVisible = true"]
[endmacro]
;メッセージウィンドウとシステムボタン表示(通常)
[macro name=WindowOnBottom]
[eval exp="tf.tmp=kag.rightClickEnabled"]
[rclick enabled=false]
[backlay]
[eval exp="global.systembutton_object.winUpDownBttonSetNormal()"]
; [sysbtopt backvisible=true align=bottom cond="+mp.nobutton==false"]
[if exp="+mp.nosave==false"]
[eval exp="tf.disableSave=0"]
[eval exp="kag.quickSaveMenuItem.enabled=true"]
[else]
[eval exp="tf.disableSave=1"]
[eval exp="kag.quickSaveMenuItem.enabled=false"]
[endif]
[sysbtopt backvisible=true align=bottom]
[eval exp="setSystemButton()"]
[layopt layer=message0 page=back visible=true top=574 opacity=&sf.messageWindowOpacity]
[layopt layer=message1 page=back visible=true top=574 opacity=255]
[trans method=crossfade time=250 cond="(mp.time==void)&&(sf.effectFade==1)&&(kag.skipMode!=4)"]
[trans method=crossfade time=%time cond="(mp.time!=void)&&(sf.effectFade==1)&&(kag.skipMode!=4)"]
[trans method=crossfade time=0 cond="(sf.effectFade==0)||(kag.skipMode==4)"]
[wt]
[eval exp="f.windowTopNow=0"]
[rclick enabled=&tf.tmp]
[label]
; [ExecAfterLoad2 cond="tf.afterLoad2==true"]
[eval exp="tf.windowVisible = true"]
[sethistfont]
[endmacro]
;メッセージウィンドウとシステムボタン表示(上部)
[macro name=WindowOnTop]
[eval exp="tf.tmp=kag.rightClickEnabled"]
[rclick enabled=false]
[eval exp="sf.windowTop=1"]
[backlay]
[eval exp="global.systembutton_object.winUpDownBttonSetHigh()"]
; [sysbtopt backvisible=true align=top cond="+mp.nobutton==false"]
[if exp="+mp.nosave==false"]
[eval exp="tf.disableSave=0"]
[eval exp="kag.quickSaveMenuItem.enabled=true"]
[else]
[eval exp="tf.disableSave=1"]
[eval exp="kag.quickSaveMenuItem.enabled=false"]
[endif]
[sysbtopt backvisible=true align=bottom]
[eval exp="setSystemButton()"]
[layopt layer=message0 page=back visible=true top=8 opacity=&sf.messageWindowOpacity]
[layopt layer=message1 page=back visible=true top=8 opacity=255]
[trans method=crossfade time=250 cond="(mp.time==void)&&(sf.effectFade==1)"]
[trans method=crossfade time=%time cond="(mp.time!=void)&&(sf.effectFade==1)"]
[trans method=crossfade time=0 cond="sf.effectFade==0"]
[wt]
[eval exp="f.windowTopNow=1" cond="sf.windowAutoMove==1"]
[rclick enabled=&tf.tmp]
[label]
; [ExecAfterLoad2 cond="tf.afterLoad2==true"]
[eval exp="tf.windowVisible = true"]
[sethistfont]
[endmacro]
[macro name=sethistfont]
[hfont face=&"kag.historyLayer.meslayer.fontName[sf.language]"]
[endmacro]
[macro name=resethistfont]
[endhfont]
[endmacro]
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
;背景表示
[macro name=BgSet]
[eval exp="layerMoveStop(0)"]
[eval exp="layerMoveStop(1)"]
[eval exp="layerMoveStop(2)"]
[eval exp="f.nowShowingCg = ''"]
[eval exp="f.nowShowingCg2 = ''"]
; [eval exp="f.nowShowingCgAlt = ''"]
[eval exp="kag.nowExistCutin = 0"]
[eval exp="kag.nowShowCutin = 0"]
[eval exp="f.chara0 = ''"]
[eval exp="f.chara1 = ''"]
[eval exp="f.chara2 = ''"]
[eval exp="f.orgChara0 = ''"]
[eval exp="f.orgChara1 = ''"]
[eval exp="f.orgChara2 = ''"]
[eval exp="f.nowShowingBG=mp.storage"]
[freeimage layer=0 page=back]
[freeimage layer=1 page=back]
[freeimage layer=2 page=back]
[freeimage layer=3 page=back]
[image storage=%storage page=back layer=base mode=%mode|alpha]
[endmacro]
[iscript]
function checkPlace(storage){
if(+storage.substring(4,1)==1){
f.gamma = [1.1, 0.9, 1.0];
}else if(+storage.substring(4,1)==2){
f.gamma = [0.8, 0.8, 1.0];
}else{
f.gamma = [1.0, 1.0, 1.0];
}
}
function getShoukoGlassLess(storage){
return Storages.getPlacedPath(Storages.chopStorageExt(storage) + "@.png");
}
function getHairLess(storage){
return Storages.getPlacedPath(Storages.chopStorageExt(storage) + "#.png");
}
function getCgName(storage){
// ステージに合わせた適切なイベントCGファイル名を返す
var file = storage.substring(0, 5).toLowerCase();
var num;
switch(f.stage){
case 1:
// 街
num = 1;
break;
// case 2:
// // 電車(無い)
case 3:
// プール
num = 2;
break;
case 4:
// 廃工場
num = 4;
break;
case 5:
// 洞窟(無い)
num = 5;
break;
case 6:
// 本拠地
if(f.stageProgress > 0){
num = 7;
}else{
num = 6;
}
break;
case 3.8:
case 7:
// 追加ステージ
if(f.stageProgress > 1){
num = 3;
}else{
num = 1;
}
}
if(cgStageArray2[file]!==void){
if(!Storages.isExistentStorage(storage+"_"+num+".png")){
num = 0;
do{
num++;
if(cgStageArray2[file][num]) break;
}while(num<cgStageArray2[file].count);
}
if(Storages.isExistentStorage(storage+"_"+num+".png")){
storage += "_" + num;
}else{
storage = "_black";
}
}
storage = storage.replace(/\$/, "");
if(+sf.アヘ顔表示無し){
if(Storages.isExistentStorage(storage+'$.png')){
return storage+'$';
}
}
return storage;
}
function getCgName2(storage){
var file = storage.substring(0, 5).toLowerCase();
if(cgStageArray2[file] !== void && cgStageArray2[file][f.stage] !== void){
storage += "_" + f.stage;
}
storage = storage.replace(/\$/, "");
if(+sf.アヘ顔表示無し){
if(Storages.isExistentStorage(storage+'$.png')){
return storage+'$';
}
}
return storage;
}
[endscript]
;イベントCG表示
[macro name=CgSet]
[eval exp="kag.nowShowCutin=0"]
[eval exp="f.nowShowingBG=''"]
[if exp="mp.storage!=''"]
[eval exp="sf.cgOpenFlag[mp.storage.toLowerCase()] = 1"]
[eval exp="f.chara0 = ''"]
[eval exp="f.chara1 = ''"]
[eval exp="f.chara2 = ''"]
[eval exp="f.orgChara0 = ''"]
[eval exp="f.orgChara1 = ''"]
[eval exp="f.orgChara2 = ''"]
[eval exp="f.nowShowingCg = mp.storage"]
[eval exp="f.nowShowingCg2 = ''"]
; [eval exp="f.nowShowingCgAlt = (mp.alt!==void)? mp.alt : ''"]
[eval exp="tf.cg = getCgName(f.nowShowingCg)"]
[if exp="mp.moviemode===void || (+mp.moviemode==true && sf.effectMovieMode==0)"]
[if exp="mp.staylayer===void || +mp.staylayer==0"]
[freeimage layer=0 page=back]
[freeimage layer=1 page=back]
[freeimage layer=2 page=back]
[freeimage layer=3 page=back]
[endif]
[if exp="mp.layer!==void && mp.layer.length==1"]
[layopt layer=%layer page=back visible=true opacity=255]
[image storage=&(tf.cg) page=back layer=%layer left=0 visible=true]
[else]
[image storage=&(tf.cg) page=back layer=base]
[endif]
[Update cond="+mp.moviemode==true"]
[endif]
[endif]
[endmacro]
[macro name="CgOpenFlagSet"]
[eval exp="sf.cgOpenFlag[mp.storage.toLowerCase()] = 1"]
[endmacro]
[macro name="ResetLayer"]
[freeimage layer=%layer page=%page|back]
[eval exp="kag.back.layers[+mp.layer].type = ltAlpha"]
[eval exp="kag.back.layers[+mp.layer].fillRect(0,0,32,32,0)"]
[endmacro]
;Hシーンの開始と終了
[macro name=HSceneStart]
[ExtasyCount]
[call storage=configmenu.ks target=*setVolume]
[eval exp="kag.foreExtasyCountLayer.update()"]
[eval exp="kag.backExtasyCountLayer.update()"]
[eval exp="kag.foreExtasyCountLayer.show()" cond="sf.showExtasyCount==1"]
[eval exp="kag.backExtasyCountLayer.show()" cond="sf.showExtasyCount==1"]
[eval exp="f.inHScene = 1"]
[eval exp="f.inHScene2 = 0"]
[endmacro]
[macro name=HSceneStart2]
[call storage=configmenu.ks target=*setVolume]
[eval exp="f.inHScene = 1"]
[eval exp="f.inHScene2 = 1"]
[endmacro]
[macro name=HSceneEnd]
[ExtasyCountCancel]
[eval exp="kag.foreExtasyCountLayer.update()"]
[eval exp="kag.backExtasyCountLayer.update()"]
[eval exp="kag.foreExtasyCountLayer.hide()"]
[eval exp="kag.backExtasyCountLayer.hide()"]
[eval exp="f.inHScene = 0"]
[eval exp="f.inHScene2 = 0"]
[endmacro]
[macro name=Extasy]
[ExtasyMale]
[ExtasyFemale]
[endmacro]
[macro name=ExtasyF]
[ExtasyFemale]
[if exp="typeof(global.dho) != 'undefined' && dho !== void && isvalid dho && dho.timer.enabled"]
[eval exp="copyAnimeLayer(0)"]
[backlay]
[eval exp="kag.back.layers[0].doBoxBlur(4,4)"]
[eval exp="kag.back.layers[0].opacity = 120"]
[layopt layer=3 page=back visible=true opacity=20]
[image layer=3 page=back visible=true storage=_white pos=c]
[Update time=200]
[freeimage page=back layer=0]
[freeimage page=back layer=3]
[Update]
[else]
[if exp="sf.effectFlash!=0 || sf.effectFade!=0"]
[backlay]
[freeimage layer=3 page=back]
[layopt layer=3 page=back visible=true opacity=20]
[image layer=3 page=back visible=true storage=_white pos=c]
[freeimage layer=0 page=back]
[layopt layer=0 page=back visible=true opacity=100]
[image layer=0 page=back visible=true storage=&f.nowShowingCg pos=c]
[eval exp="kag.back.layers[0].doBoxBlur(10,10)"]
[Update time=200]
[CgSet storage=&f.nowShowingCg]
[UpDate]
[endif]
[endif]
[endmacro]
[macro name=ExtasyM]
[ExtasyMale]
[endmacro]
[macro name=ExtasyCount]
; [eval exp="extasyCount()"]
[eval exp="kag.extasyCheckConductor.assign(kag.conductor)"]
[eval exp="kag.extasyCheckConductor.getCount()"]
[eval exp="kag.extasyCheckConductor.clear()"]
[endmacro]
[iscript]
//function extasyCount()
//{
// kag.extasyCheckConductor.assign(kag.conductor);
// kag.extasyCheckConductor.getCount();
// kag.extasyCheckConductor.clear();
//}
function layerMoveStop(layer)
{
if(kag.fore.layers[layer].moveObject!==void){
kag.fore.layers[layer].moveObject.stopMove();
}
if(kag.back.layers[layer].moveObject!==void){
kag.back.layers[layer].moveObject.stopMove();
}
}
function getCharaFileName(storage){
// if(storage[2]=='c' && storage[4]=='2'){
// if(+sf.旧コスモード==1){
// return "b_c92" + storage[5];
// }else{
// return "b_c02" + storage[5];
// }
// }
//
// if(storage[2]=='f'){
// if(+sf.翔子眼鏡無し == 1){
// if(Storages.isExistentStorage(storage+'@.png')){
// return storage+'@';
// }
// }
// }
if(sf.adjEvilCosMode){
if((storage[2]=='a' || storage[2]=='b') && (storage[3] == '2' || storage[3] == '4')){
switch(sf.adjCosVariation){
case 4:
storage = "b_" + storage[2] + "4" + storage.substring(4);
break;
case 6:
storage = "b_" + storage[2] + "3" + storage.substring(4);
break;
case 9:
storage = "b_" + storage[2] + "0" + storage.substring(4);
break;
}
}
}
return storage;
}
[endscript]
;キャラ表示(レイヤー0)
[macro name=ChrSet0]
[backlay layer=0]
[layopt layer=0 page=back opacity=255 visible=true]
[eval exp="f.orgChara0 = mp.storage"]
[eval exp="f.chara0 = getCharaFileName(mp.storage)"]
[if exp="+mp.changecolor==true"]
[eval exp="checkPlace(f.nowShowingBG)"]
[eval exp="tf.rgamma = f.gamma[0]"]
[eval exp="tf.ggamma = f.gamma[1]"]
[eval exp="tf.bgamma = f.gamma[2]"]
[else]
[eval exp="tf.rgamma = 1.0"]
[eval exp="tf.ggamma = 1.0"]
[eval exp="tf.bgamma = 1.0"]
[endif]
[if exp="mp.left===void"]
[image layer=0 page=back visible=true storage=&f.chara0 pos=%pos|c rgamma=&tf.rgamma ggamma=&tf.ggamma bgamma=&tf.bgamma mode=%mode|alpha]
[else]
[image layer=0 page=back visible=true storage=&f.chara0 left=%left rgamma=&tf.rgamma ggamma=&tf.ggamma bgamma=&tf.bgamma mode=%mode|alpha]
[endif]
[endmacro]
;キャラ消去(レイヤー0)
[macro name=ChrReset0]
[backlay layer=0]
[freeimage layer=0 page=back]
[eval exp="layerMoveStop(0)"]
[eval exp="f.chara0 = ''"]
[eval exp="f.orgChara0 = ''"]
[endmacro]
;キャラ表示(レイヤー1)
[macro name=ChrSet1]
[backlay layer=1]
[layopt layer=1 page=back opacity=255 visible=true]
[eval exp="f.orgChara1 = mp.storage"]
[eval exp="f.chara1 = getCharaFileName(mp.storage)"]
[if exp="+mp.changecolor==true"]
[eval exp="checkPlace(f.nowShowingBG)"]
[eval exp="tf.rgamma = f.gamma[0]"]
[eval exp="tf.ggamma = f.gamma[1]"]
[eval exp="tf.bgamma = f.gamma[2]"]
[else]
[eval exp="tf.rgamma = 1.0"]
[eval exp="tf.ggamma = 1.0"]
[eval exp="tf.bgamma = 1.0"]
[endif]
[if exp="mp.left===void"]
[image layer=1 page=back visible=true storage=&f.chara1 pos=%pos|l rgamma=&tf.rgamma ggamma=&tf.ggamma bgamma=&tf.bgamma mode=%mode|alpha]
[else]
[image layer=1 page=back visible=true storage=&f.chara1 left=%left rgamma=&tf.rgamma ggamma=&tf.ggamma bgamma=&tf.bgamma mode=%mode|alpha]
[endif]
[endmacro]
;キャラ消去(レイヤー1)
[macro name=ChrReset1]
[backlay layer=1]
[freeimage layer=1 page=back]
[eval exp="layerMoveStop(1)"]
[eval exp="f.chara1 = ''"]
[eval exp="f.orgChara1 = ''"]
[endmacro]
;キャラ表示(レイヤー2)
[macro name=ChrSet2]
[backlay layer=2]
[layopt layer=2 page=back opacity=255 visible=true]
[eval exp="f.orgChara2 = mp.storage"]
[eval exp="f.chara2 = getCharaFileName(mp.storage)"]
[if exp="+mp.changecolor==true"]
[eval exp="checkPlace(f.nowShowingBG)"]
[eval exp="tf.rgamma = f.gamma[0]"]
[eval exp="tf.ggamma = f.gamma[1]"]
[eval exp="tf.bgamma = f.gamma[2]"]
[else]
[eval exp="tf.rgamma = 1.0"]
[eval exp="tf.ggamma = 1.0"]
[eval exp="tf.bgamma = 1.0"]
[endif]
[if exp="mp.left===void"]
[image layer=2 page=back visible=true storage=&f.chara2 pos=%pos|r rgamma=&tf.rgamma ggamma=&tf.ggamma bgamma=&tf.bgamma mode=%mode|alpha]
[else]
[image layer=2 page=back visible=true storage=&f.chara2 left=%left rgamma=&tf.rgamma ggamma=&tf.ggamma bgamma=&tf.bgamma mode=%mode|alpha]
[endif]
[endmacro]
;キャラ消去(レイヤー2)
[macro name=ChrReset2]
[backlay layer=2]
[freeimage layer=2 page=back]
[eval exp="layerMoveStop(2)"]
[eval exp="f.chara2 = ''"]
[eval exp="f.orgChara2 = ''"]
[endmacro]
;画面更新
[macro name=Update]
[if exp="bao.enabled == true && tf.windowVisible == true"]
[eval exp="mp.bgmStorage = kag.bgm.playingStorage.substring(0, 4)"]
[if exp="mp.bgmStorage == 'stag' || mp.bgmStorage == 'boss'"]
[fadebgm time=500 volume=80]
[endif]
[endif]
[trans method=crossfade time=0 cond="sf.effectFade==0"]
[trans method=crossfade time=500 cond="(mp.time==void)&&(mp.rule==void)&&(sf.effectFade==1)"]
[trans method=crossfade time=%time cond="(mp.time!=void)&&(mp.rule==void)&&(sf.effectFade==1)"]
[trans method=universal rule=%rule time=500 vague=40 cond="(mp.time==void)&&(mp.rule!=void)&&(mp.vague==void)&&(sf.effectFade==1)"]
[trans method=universal rule=%rule time=500 vague=%vague cond="(mp.time==void)&&(mp.rule!=void)&&(mp.vague!=void)&&(sf.effectFade==1)"]
[trans method=universal rule=%rule time=%time vague=40 cond="(mp.time!=void)&&(mp.rule!=void)&&(mp.vague==void)&&(sf.effectFade==1)"]
[trans method=universal rule=%rule time=%time vague=%vague cond="(mp.time!=void)&&(mp.rule!=void)&&(mp.vague!=void)&&(sf.effectFade==1)"]
[wt canskip=%canskip|true]
[eval exp="f.nowForeSlot = (kag.movies[0].layer1 === kag.fore.layers[f.movieLayer])? 0 : 1" cond="f.movieLayer!==void"]
[label cond="+mp.nolabel!=true"]
; [ExecAfterLoad2 cond="tf.afterLoad2==true"]
[endmacro]
[macro name=Update2]
[Update canskip=false cond="kag.skipMode!=4"]
[Update canskip=true cond="kag.skipMode==4"]
[endmacro]
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
;画面揺れ
[macro name=QuakeScreen]
[quake time=%time|500 vmax=%vmax|10 hmax=%hmax|10 cond="kag.skipMode!=4 && sf.effectQuake==1"]
[endmacro]
;フラッシュ
[macro name=Flash]
[if exp="sf.effectFlash==1"]
[backlay]
[freeimage layer=3 page=back]
[layopt layer=3 page=back visible=true opacity=255]
[image layer=3 page=back visible=true storage=_white pos=c]
[UpDate time=10]
[freeimage layer=3 page=back]
[UpDate time=%time|500]
[endif]
[endmacro]
[macro name=Flash1]
[Flash]
[endmacro]
[macro name=Flash2]
[if exp="sf.effectFlash==1"]
[backlay]
[freeimage layer=3 page=back]
[layopt layer=3 page=back visible=true opacity=255]
[image layer=3 page=back visible=true storage=_white pos=c]
[UpDate time=10]
[freeimage layer=3 page=back]
[UpDate time=100]
[image layer=3 page=back visible=true storage=_white pos=c]
[UpDate time=10]
[freeimage layer=3 page=back]
[UpDate]
[endif]
[endmacro]
[iscript]
function evilEyeEffect(layer, path, time)
{
var w = kag.fore.base.width;
var h = kag.fore.base.height;
kag.back.messages[0].visible = false;
kag.back.messages[1].visible = false;
kag.back.messages[2].visible = false;
kag.back.layers[3].piledCopy(0,0,kag.back.base,0,0,w,h);
var target;
if(layer === void || layer == 'base'){
target = kag.fore.base;
}else{
target = kag.fore.layers[layer];
}
var e = %[];
e.clipx = 0;
e.clipy = 0;
e.clipw = w;
e.cliph = h;
e.path = path;
e.withalpha = true;
e.time = time;
e.accel = 0;
kag.fore.layers[3].beginZoomingMove(e, kag.back.layers[3]);
}
[endscript]
[macro name=EvilEye]
[if exp="sf.effectFlash==1"]
[backlay]
[image page=fore layer=3 storage="_tr" visible=true]
[image page=back layer=3 storage="_tr" visible=true]
[layopt layer=3 page=fore visible=true opacity=255]
[eval exp="kag.fore.layers[3].visible = true"]
[eval exp="kag.fore.layers[3].opacity = 255"]
[eval exp="evilEyeEffect(mp.layer, '(0,0,1366,768,128,48,27,1270,714,80)', 150)"]
[wm layer=3]
[eval exp="evilEyeEffect(mp.layer, '(48,27,1270,714,80,0,0,1366,768,50)' , 600)"]
[wm layer=3]
[eval exp="kag.back.layers[3].visible = false"]
[eval exp="kag.fore.layers[3].visible = false"]
[backlay]
[endif]
[endmacro]
[macro name=Shine]
[if exp="sf.effectFlash==1"]
[backlay]
[image page=fore layer=3 storage="_tr" visible=true]
[image page=back layer=3 storage="_tr" visible=true]
[layopt layer=3 page=fore visible=true opacity=255]
[eval exp="kag.fore.layers[3].visible = true"]
[eval exp="evilEyeEffect(mp.layer, '(0,0,1366,768,128,48,27,1270,714,0)', 500)"]
[wm]
[eval exp="kag.back.layers[3].visible = false"]
[eval exp="kag.fore.layers[3].visible = false"]
[backlay]
[endif]
[endmacro]
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
;表情表示
[iscript]
function getGlassLessFace(storage){
if(sf.翔子眼鏡無し==1){
if(Storages.isExistentStorage(storage+"@.png")){
return storage+"@";
}
}
return storage;
}
function checkFaceChara(storage){
//女の子キャラの表情画像のアルファベットリスト
var femaleCharList = "abcegr";
if (femaleCharList.indexOf(storage[2]) == -1){
return 0;
}else{
return 1;
}
}
function checkFace(storage){
if(storage===void) return;
switch(sf.faceMode){
case 0:
//常に表示する
if(sf.faceModeChar==1) {
return checkFaceChara(storage);
}else{
return 1;
}
case 1:
//通常シーンのみ
if(f.inHScene==0) {
if(sf.faceModeChar==1) {
return checkFaceChara(storage);
}else{
return 1;
}
}else{
return 0;
}
case 2:
//Hシーンのみ
if(f.inHScene==1) {
if(sf.faceModeChar==1) {
return checkFaceChara(storage);
}else{
return 1;
}
}else{
return 0;
}
case 3:
//常に表示しない
return 0;
}
}
//var marginL;
//
// function setMarginLMatrix(){
// switch (sf.language){
// case En:
// marginL = [396,470];
// break;
// default:
//// marginL = [404,480];
// marginL = [396,470];
// break;
// }
// }
//
//setMarginLMatrix();
[endscript]
[macro name=PutFaceButtom]
[if exp="mp.time===void"]
[position layer=message2 page=fore left=220 top=585 height=136 visible=true frame=%storage cond="checkFace(mp.storage)==1"]
[position layer=message2 page=fore left=220 top=585 height=136 visible=false frame=%storage cond="checkFace(mp.storage)==0"]
[else]
[backlay]
[position layer=message2 page=back left=220 top=585 height=136 visible=true frame=%storage cond="checkFace(mp.storage)==1"]
[position layer=message2 page=back left=220 top=585 height=136 visible=false frame=%storage cond="checkFace(mp.storage)==0"]
[trans method=crossfade time=%time]
[wt]
[endif]
[endmacro]
[macro name=PutFaceTop]
[if exp="mp.time===void"]
[position layer=message2 page=fore left=220 top=19 height=136 visible=true frame=%storage cond="checkFace(mp.storage)==1"]
[position layer=message2 page=fore left=220 top=19 height=136 visible=false frame=%storage cond="checkFace(mp.storage)==0"]
[else]
[backlay]
[position layer=message2 page=back left=220 top=19 height=136 visible=true frame=%storage cond="checkFace(mp.storage)==1"]
[position layer=message2 page=back left=220 top=19 height=136 visible=false frame=%storage cond="checkFace(mp.storage)==0"]
[trans method=crossfade time=%time]
[wt]
[endif]
[endmacro]
[macro name=FaceOpt]
[eval exp="tf.faceOpt = (mp.num===void||mp.num==1)? 0 : (+mp.num-1)"]
[eval exp="mp.tmp=marginL[tf.faceOpt]"]
[position layer=message1 marginl=&mp.tmp]
[endmacro]
[macro name=Face]
[ExecAfterLoad2 cond="tf.afterLoad2==true"]
[if exp="mp.alt !== void && sf.アヘ顔表示無し"]
[eval exp="mp.storage = mp.alt"]
[endif]
[eval exp="tf.showFaceFile = getGlassLessFace(mp.storage)"]
[eval exp="f.nowShowingFaceFile = mp.storage"]
[PutFaceButtom storage=&tf.showFaceFile time=%time cond="f.windowTopNow==0"]
[PutFaceTop storage=&tf.showFaceFile time=%time cond="f.windowTopNow==1"]
[if exp="!(mp.nohistory!==void && +mp.nohistory==true)"]
[hface graphic=&tf.showFaceFile width=82 height=82 frame=true]
[endif]
[eval exp="tf.faceOpt = 0"]
; [eval exp="tf.marginl = 186 - 128 + kag.fore.messages[2].width"]
; [position layer=message1 marginl=&tf.marginl]
[endmacro]
;表情消去
[macro name=FaceOff]
[position layer=message2 page=fore left=220 top=585 height=136 visible=false frame="" color=0x000000 opacity=0]
[position layer=message2 page=back left=220 top=585 height=136 visible=false frame="" color=0x000000 opacity=0]
[layopt layer=message2 page=fore visible=false]
[layopt layer=message2 page=back visible=false]
[eval exp="f.nowShowingFaceFile = ''"]
[eval exp="mp.tmp = marginL[0]"]
[position page=fore layer=message1 marginl=&mp.tmp]
[position page=back layer=message1 marginl=&mp.tmp]
[endmacro]
[macro name=FaceHide]
[layopt layer=message2 visible=false]
[endmacro]
[macro name=FaceShow]
[layopt layer=message2 visible=true]
[endmacro]
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
[iscript]
function getMovieFileName(storage){
if(storage.indexOf(".")>=0){
return storage;
}
if(sf.effectMovieMode==1 && sf.aviEnabled==true){
return storage + ".avi";
}
if(sf.effectMovieMode==2){
return storage + ".mpg";
}
return storage + ".mpg";
}
[endscript]
;ムービー再生
[macro name="PlayMovie"]
[eval exp="kag.movies[0].cancelSegmentLoop()"]
[eval exp="kag.movies[1].cancelSegmentLoop()"]
[eval exp="tf.movieFile = getMovieFileName(mp.storage)"]
[video loop=false mode=layer slot=0]
[videolayer visible=true layer=%layer page=fore channel=1 slot=0]
[videolayer visible=true layer=%layer page=back channel=2 slot=0]
[openvideo storage=&(tf.movieFile) slot=0]
[preparevideo slot=0][wp slot=0 for=prepare]
[playvideo storage=&(tf.movieFile) slot=0]
[if exp="+mp.usebgmvolume"]
[eval exp="kag.movies[0].audioVolume=f.volumeMatrix[sf.bgmVolume]*1000 * f.volumeMatrix[sf.masterVolume] / 100"]
[eval exp="kag.movies[0].audioVolume=0" cond="sf.bgmMute || sf.masterMute"]
[else]
[eval exp="kag.movies[0].audioVolume=f.volumeMatrix[sf.seVolume]*1000 * f.volumeMatrix[sf.masterVolume] / 100"]
[eval exp="kag.movies[0].audioVolume=0" cond="sf.seMute || sf.masterMute"]
[endif]
[eval exp="kag.movies[1].audioVolume=0"]
[layopt layer=%layer left=0 top=0 opacity=255 page=back visible=true]
[layopt layer=%layer left=0 top=0 opacity=255 page=fore visible=false]
[endmacro]
[macro name="StopMovie"]
[stopvideo slot=0]
[clearvideolayer slot=0 channel=1]
[clearvideolayer slot=0 channel=2]
[endmacro]
[macro name="PlayBgMovie"]
[eval exp="kag.movies[0].cancelSegmentLoop()"]
[eval exp="kag.movies[1].cancelSegmentLoop()"]
[eval exp="tf.movieFile = getMovieFileName(mp.storage)"]
[video loop=%loop|true mode=layer slot=0]
[videolayer visible=true layer=%layer page=fore channel=1 slot=0]
[videolayer visible=true layer=%layer page=back channel=2 slot=0]
[openvideo storage=&(tf.movieFile) slot=0]
[preparevideo slot=0][wp slot=0 for=prepare]
[playvideo storage=&(tf.movieFile) slot=0]
[layopt layer=%layer left=0 top=0 opacity=255 page=back visible=true]
[layopt layer=%layer left=0 top=0 opacity=255 page=fore visible=false]
[endmacro]
[macro name="PlayEventMovie"]
[eval exp="f.nowPlayingEventMovie=Storages.chopStorageExt(mp.storage)"]
[eval exp="tf.movieFile = getMovieFileName(f.nowPlayingEventMovie)"]
[if exp="sf.effectMovieMode!=0"]
[fadeoutse buf=7 time=500]
[fadeoutse buf=8 time=500]
[video loop=true mode=layer slot=0]
[video loop=true mode=layer slot=1]
[videolayer visible=true layer=%layer|0 page=fore channel=1 slot=0]
[videolayer visible=true layer=%layer|0 page=back channel=1 slot=1]
[eval exp="kag.movies[0].layer2 = null"]
[eval exp="kag.movies[1].layer2 = null"]
[openvideo storage=&(tf.movieFile) slot=0]
[preparevideo slot=0][wp slot=0 for=prepare]
[openvideo storage=&(tf.movieFile) slot=1]
[preparevideo slot=1][wp slot=1 for=prepare]
[playvideo storage=&(tf.movieFile) slot=0]
[playvideo storage=&(tf.movieFile) slot=1]
[layopt layer=%layer|0 left=0 top=0 page=fore visible=false]
[layopt layer=%layer|0 left=0 top=0 page=back visible=true]
[eval exp="f.movieLayer = (mp.layer!==void)?(+mp.layer):0"]
;音量を設定
[eval exp="f.nowForeSlot = (kag.movies[0].layer1 === kag.fore.layers[f.movieLayer])? 0 : 1"]
[eval exp="kag.movies[!f.nowForeSlot].audioVolume=f.volumeMatrix[sf.seVolume]*1000"]
[eval exp="kag.movies[!f.nowForeSlot].audioVolume=0" cond="sf.seMute==1"]
[eval exp="kag.movies[f.nowForeSlot].audioVolume=0"]
[eval exp="f.vol=[] if f.vol===void"]
[eval exp="f.vol[!f.nowForeSlot]=f.volumeMatrix[sf.seVolume]*1000"]
[eval exp="f.vol[!f.nowForeSlot]=0" cond="sf.seMute==1"]
[eval exp="f.vol[f.nowForeSlot]=0"]
[endif]
[endmacro]
[macro name="ChangeEventMovie"]
[eval exp="f.nowPlayingEventMovie=Storages.chopStorageExt(mp.storage)"]
[eval exp="tf.movieFile = getMovieFileName(f.nowPlayingEventMovie)"]
[if exp="sf.effectMovieMode!=0"]
[eval exp="f.nowForeSlot = (kag.movies[0].layer1 === kag.fore.layers[f.movieLayer])? 0 : 1"]
[openvideo storage=&(tf.movieFile) slot=&(!f.nowForeSlot)]
[preparevideo slot=&(!f.nowForeSlot)][wp slot=&(!f.nowForeSlot) for=prepare]
[playvideo storage=&(tf.movieFile) slot=&(!f.nowForeSlot)]
;音量を設定
[eval exp="kag.movies[!f.nowForeSlot].audioVolume=f.volumeMatrix[sf.seVolume]*1000"]
[eval exp="kag.movies[!f.nowForeSlot].audioVolume=0" cond="sf.seMute==1"]
[eval exp="kag.movies[f.nowForeSlot].audioVolume=0"]
[UpDate]
[openvideo storage=&(tf.movieFile) slot=&(!f.nowForeSlot)]
[preparevideo slot=&(!f.nowForeSlot)][wp slot=&(!f.nowForeSlot) for=prepare]
[playvideo storage=&(tf.movieFile) slot=&(!f.nowForeSlot)]
;音量を設定
[eval exp="kag.movies[!f.nowForeSlot].audioVolume=f.volumeMatrix[sf.seVolume]*1000"]
[eval exp="kag.movies[!f.nowForeSlot].audioVolume=0" cond="sf.seMute==1"]
[eval exp="kag.movies[f.nowForeSlot].audioVolume=0"]
[endif]
[endmacro]
[macro name="SetLoop"]
[videosegloop slot=0 start=%start end=%end]
[videosegloop slot=1 start=%start end=%end]
[eval exp="f.eventMovieLoopStart=(+mp.start)"]
[eval exp="f.eventMovieLoopEnd=(+mp.end)"]
[endmacro]
[macro name="FwdEventMovie"]
[if exp="sf.effectMovieMode!=0"]
[eval exp="f.nowForeSlot = (kag.movies[0].layer1 === kag.fore.layers[f.movieLayer])? 0 : 1"]
[if exp="kag.movies[(f.nowForeSlot)].frame<(+mp.frame)"]
[eval exp="kag.movies[f.nowForeSlot].audioVolume=0"]
[eval exp="kag.movies[!f.nowForeSlot].audioVolume=f.volumeMatrix[sf.seVolume]*1000"]
[eval exp="kag.movies[!f.nowForeSlot].audioVolume=0" cond="sf.seMute==1"]
[eval exp="kag.movies[!f.nowForeSlot].frame=(+mp.frame)"]
[UpDate time=500]
[eval exp="kag.movies[!f.nowForeSlot].frame=kag.movies[f.nowForeSlot].frame"]
[EndIf]
[endif]
[endmacro]
[macro name="RwdEventMovie"]
[if exp="kag.movies[(f.nowForeSlot)].frame>(+mp.frame)"]
[eval exp="kag.movies[(!f.nowForeSlot)].frame=(+mp.frame)"]
[UpDate]
[EndIf]
[endmacro]
;ムービー後処理
[macro name="StopBgMovie"]
[stopvideo slot=0]
[clearvideolayer slot=0 channel=1]
[clearvideolayer slot=0 channel=2]
[endmacro]
[macro name="StopEventMovie"]
[stopvideo slot=0]
[stopvideo slot=1]
[clearvideolayer slot=0 channel=1]
[clearvideolayer slot=1 channel=1]
[eval exp="f.nowPlayingEventMovie=''"]
[eval exp="kag.movies[0].cancelSegmentLoop()"]
[eval exp="kag.movies[1].cancelSegmentLoop()"]
[endmacro]
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
;ボイス関連関数&マクロ
[iscript]
function stopVoices()
{
kag.se[2].stop();
kag.se[3].stop();
kag.se[5].stop();
}
function stopVoices1()
{
kag.se[2].stop();
kag.se[3].stop();
kag.se[5].stop();
kag.se[6].stop();
}
function stopVoices2()
{
kag.se[2].stop();
kag.se[3].stop();
kag.se[4].stop();
kag.se[5].stop();
}
function createHistoryActionExp(buf, storage)
{
// メッセージ履歴をクリックしたときに実行する TJS 式を生成する
if(+buf==5){
return "stopVoices1(),kag.se[5].volume=100,kag.se[5].play(%[storage:(sf.voiceMute)?'dummy':'" + storage + "']),tf.nowReturnedFromHistory=true,tf.voiceForConfig='" + storage + "',tf.bufForConfig=" + buf;
}else{
return "stopVoices2(),kag.se[2].volume=100,kag.se[2].play(%[storage:(sf.voiceMute)?'dummy':'" + storage + "']),tf.nowReturnedFromHistory=true,tf.voiceForConfig='" + storage + "',tf.bufForConfig=" + buf;
}
}
function voicePlayCheck(storage){
if(+f.inHScene){
return sf.voiceSetting2[getVoiceIndex(storage)];
}else{
return sf.voiceSetting1[getVoiceIndex(storage)];
}
}
[endscript]
[macro name=Voice]
[ExecAfterLoad2 cond="tf.afterLoad2==true"]
[eval exp="f.nowVoiceLine=1"]
[eval exp="f.voicePlayFlag=voicePlayCheck(mp.storage)"]
[eval exp="tf.voicePlayVolume=sf.voiceVolume2[getVoiceIndex(mp.storage)]"]
[if exp="f.voicePlayFlag==true"]
[if exp="mp.fade!==void && +mp.fade==1"]
[fadese buf=&f.voicePlayBuf time=%time|500 volume=&(tf.voicePlayVolume*0.6)]
[else]
[stopse buf=&f.voicePlayBuf cond="(mp.stay===void)||(+mp.stay!=1)"]
[endif]
[endif]
[if exp="tf.voiceLessMode==1"]
[eval exp="tf.voiceFile = 'a0000'"]
[else]
[eval exp="tf.voiceFile = mp.storage"]
[endif]
[eval exp="f.voicePlayBuf = mp.buf"]
[eval exp="f.lastVoice = tf.voiceFile"]
[eval exp="tf.bufForConfig = mp.buf"]
[eval exp="tf.voiceForConfig = tf.voiceFile"]
[eval exp="f.ボイス再生行 = 1"]
[eval exp="kag.toNextTextTotalCount = 0"]
[eval exp="stopVoices()" cond="tf.nowReturnedFromHistory==true"]
[eval exp="tf.nowReturnedFromHistory = false"]
[counttext]
[if exp="f.voicePlayFlag==true"]
[playse storage=&tf.voiceFile buf=%buf cond="sf.voiceMute==0"]
[playse storage=dummy buf=%buf cond="sf.voiceMute==1"]
[seopt volume=&tf.voicePlayVolume buf=%buf]
[eval exp="tf.voiceTime = kag.se[f.voicePlayBuf].totalTime" cond="!tf.disableSound"]
; [fadebgm time=500 volume=80]
;声がかぶるときはバックグラウンドのボイス音量を下げる
[if exp="(+mp.buf==2 || +mp.buf==3 || +mp.buf==5)"]
[if exp="kag.bgVoice[0]!=''"]
[eval exp="tf.voicePlayVolume=sf.voiceVolume2[getVoiceIndex(kag.bgVoice[0])]"]
[fadese buf=4 volume=&(tf.voicePlayVolume*0.6) time=200]
[endif]
[if exp="kag.bgVoice[1]!=''"]
[eval exp="tf.voicePlayVolume=sf.voiceVolume2[getVoiceIndex(kag.bgVoice[1])]"]
[fadese buf=6 volume=&(tf.voicePlayVolume*0.6) time=200]
[endif]
[endif]
[else]
;再生はしないけど再生時間は取得したいのでダミーのバッファで。
[playse storage=&tf.voiceFile buf=13]
[seopt volume=0 buf=13]
[eval exp="tf.voiceTime = kag.se[13].totalTime" cond="!tf.disableSound"]
[endif]
[endmacro]
[macro name=VoiceEnd]
[endhfont]
[endhact]
[endmacro]
[macro name=v]
[eval exp="mp.tmp = createHistoryActionExp(f.voicePlayBuf, f.lastVoice)"]
[hact exp=&mp.tmp]
[i]
[hfont color=0xffff00]
[endmacro]
[macro name=v2]
[eval exp="mp.tmp = createHistoryActionExp(f.voicePlayBuf, f.lastVoice)"]
[hact exp=&mp.tmp]
[hfont color=0xffff00]
[endmacro]
[macro name=/v]
[endhfont]
[/i]
[endhact]
[endmacro]
[macro name=ExVoice1]
[eval exp="tf.voicePlayVolume=sf.voiceVolume2[getVoiceIndex(mp.storage)]"]
[if exp="tf.voiceLessMode!=1"]
[stopse buf=2]
[stopse buf=4]
[if exp="mp.volume!==void"]
[seopt volume=&(mp.volume*tf.voicePlayVolume/100) buf=4]
[else]
[seopt volume=&(tf.voicePlayVolume) buf=4]
[endif]
[eval exp="tf.playflg=voicePlayCheck(mp.storage)"]
[eval exp="kag.bgVoice[0] = mp.storage" cond="tf.playflg==true"]
[if exp="tf.debugMode==1"]
[playse storage=&mp.storage buf=13]
[seopt volume=0 buf=13]
[endif]
[endif]
[endmacro]
[macro name=ExVoice1Start]
[eval exp="tf.voicePlayVolume=sf.voiceVolume2[getVoiceIndex(mp.storage)]"]
[if exp="tf.voiceLessMode!=1"]
[if exp="mp.volume!==void"]
[seopt volume=&(mp.volume*tf.voicePlayVolume/100) buf=4]
[else]
[seopt volume=&(tf.voicePlayVolume) buf=4]
[endif]
[eval exp="tf.playflg=voicePlayCheck(mp.storage)"]
[eval exp="kag.bgVoice[0] = mp.storage" cond="tf.playflg==true"]
[if exp="tf.debugMode==1"]
[playse storage=&mp.storage buf=13]
[seopt volume=0 buf=13]
[endif]
[endif]
[playse storage="dummy" buf=2 cond="kag.se[2].status!='play' && kag.se[4].status!='play'"]
[endmacro]
[macro name=ExVoice1Stop]
[eval exp="kag.bgVoice[0]=''"]
[fadeoutse buf=4 time=500|%time]
[seopt pan=0 buf=4]
[seopt pan=0 buf=6]
[endmacro]
[macro name=ExVoice1Clear]
[eval exp="kag.bgVoice[0]=''"]
[endmacro]
[macro name=ExVoice2]
[eval exp="tf.voicePlayVolume=sf.voiceVolume2[getVoiceIndex(mp.storage)]"]
[if exp="tf.voiceLessMode!=1"]
[stopse buf=5]
[stopse buf=6]
[eval exp="tf.pan=(kag.bgVoice[0]=='')? 0 : -20"]
[if exp="mp.volume!==void"]
[seopt volume=&(mp.volume*tf.voicePlayVolume/100) pan=&tf.pan buf=6]
[else]
[seopt volume=&(tf.voicePlayVolume) pan=&tf.pan buf=6]
[endif]
[seopt pan=&(-tf.pan) buf=4]
[eval exp="tf.playflg=voicePlayCheck(mp.storage)"]
[eval exp="kag.bgVoice[1] = mp.storage" cond="tf.playflg==true"]
[if exp="tf.debugMode==1"]
[playse storage=&mp.storage buf=13]
[seopt volume=0 buf=13]
[endif]
[endif]
[endmacro]
[macro name=ExVoice2Start]
[eval exp="tf.voicePlayVolume=sf.voiceVolume2[getVoiceIndex(mp.storage)]"]
[if exp="tf.voiceLessMode!=1"]
[eval exp="tf.pan=(kag.bgVoice[0]=='')? 0 : -20"]
[if exp="mp.volume!==void"]
[seopt volume=&(mp.volume*tf.voicePlayVolume/100) pan=&tf.pan buf=6]
[else]
[seopt volume=&(tf.voicePlayVolume) pan=&tf.pan buf=6]
[endif]
[seopt pan=&(-tf.pan) buf=4]
[eval exp="tf.playflg=voicePlayCheck(mp.storage)"]
[eval exp="kag.bgVoice[1] = mp.storage" cond="tf.playflg==true"]
[if exp="tf.debugMode==1"]
[playse storage=&mp.storage buf=13]
[seopt volume=0 buf=13]
[endif]
[endif]
[playse storage="dummy" buf=5 cond="kag.se[5].status!='play'"]
[endmacro]
[macro name=ExVoice2Stop]
[eval exp="kag.bgVoice[1]=''"]
[fadeoutse buf=6 time=500|%time]
[seopt pan=0 buf=4]
[seopt pan=0 buf=6]
[endmacro]
[macro name=ExVoice2Clear]
[eval exp="kag.bgVoice[1]=''"]
[seopt pan=0 buf=4]
[seopt pan=0 buf=6]
[endmacro]
[macro name=VoiceDown]
[eval exp="tf.voicePlayVolume = kag.se[mp.buf].volume * sf.voiceVolume2[getVoiceIndex(mp.storage)] / 100"]
[fadese buf=%buf time=%time|500 volume=&(tf.voicePlayVolume*0.6)]
[seopt buf=%buf volume=0 cond="sf.bgVoiceMute==1"]
[endmacro]
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
;SE再生マクロ
[macro name=Sound]
[if exp="(mp.moviemode===void||(+mp.moviemode!=1)) || sf.effectMovieMode==0"]
[seopt buf=%buf volume=%volume|100]
[if exp="mp.loop!==void && +mp.loop==true"]
[playse storage=%storage buf=%buf loop=true]
[else]
[if exp="kag.skipMode==0 || sf.noSeInSkip==0"]
[playse storage=%storage buf=%buf]
[ws buf=%buf cond="(mp.wait=='true')&&(kag.skipMode==0)"]
[endif]
[endif]
[endif]
[eval exp="f.buf7=mp.storage" cond="(+mp.buf)==7"]
[eval exp="f.buf8=mp.storage" cond="(+mp.buf)==8"]
[endmacro]
[macro name=SoundIn]
[if exp="mp.volume!==void"]
[if exp="(mp.moviemode===void||(+mp.moviemode!=1)) || sf.effectMovieMode==0"]
[if exp="kag.skipMode==0"]
[seopt buf=%buf volume=0]
[if exp="mp.loop!==void && +mp.loop==true"]
[playse storage=%storage buf=%buf loop=true]
[fadese time=%time buf=%buf volume=%volume]
[else]
[playse storage=%storage buf=%buf]
[fadese time=%time buf=%buf volume=%volume]
[endif]
[else]
[seopt buf=%buf volume=%volume]
[if exp="mp.loop!==void && +mp.loop==true"]
[playse storage=%storage buf=%buf loop=true]
[else]
[if exp="sf.noSeInSkip==0"]
[playse storage=%storage buf=%buf]
[endif]
[endif]
[endif]
[endif]
[else]
[if exp="(mp.moviemode===void||(+mp.moviemode!=1)) || sf.effectMovieMode==0"]
[seopt buf=%buf volume=100]
[if exp="kag.skipMode==0"]
[if exp="mp.loop!==void && +mp.loop==true"]
[fadeinse time=%time storage=%storage buf=%buf loop=true]
[else]
[fadeinse time=%time storage=%storage buf=%buf]
[endif]
[else]
[if exp="mp.loop!==void && +mp.loop==true"]
[playse storage=%storage buf=%buf loop=true]
[else]
[if exp="sf.noSeInSkip==0"]
[playse storage=%storage buf=%buf]
[endif]
[endif]
[endif]
[endif]
[endif]
[eval exp="f.buf7=mp.storage" cond="(+mp.buf)==7"]
[eval exp="f.buf8=mp.storage" cond="(+mp.buf)==8"]
[endmacro]
[macro name=SoundOut]
[fadeoutse time=%time|500 buf=%buf cond="kag.skipMode!=4"]
[stopse buf=%buf cond="kag.skipMode==4"]
[eval exp="f.buf7=''" cond="(+mp.buf)==7"]
[eval exp="f.buf8=''" cond="(+mp.buf)==8"]
[endmacro]
[macro name=SoundStop]
[stopse buf=%buf]
[eval exp="f.buf7=''" cond="(+mp.buf)==7"]
[eval exp="f.buf8=''" cond="(+mp.buf)==8"]
[endmacro]
[macro name=SoundAllOut]
[ExVoice1Clear]
[ExVoice2Clear]
[SoundOut buf=0 time=%time|500]
[SoundOut buf=1 time=%time|500]
[SoundOut buf=2 time=%time|500]
[SoundOut buf=3 time=%time|500]
[SoundOut buf=4 time=%time|500]
[SoundOut buf=5 time=%time|500]
[SoundOut buf=6 time=%time|500]
[SoundOut buf=7 time=%time|500]
[SoundOut buf=8 time=%time|500]
[SoundOut buf=9 time=%time|500]
[SoundOut buf=10 time=%time|500]
[SoundOut buf=11 time=%time|500]
[SoundOut buf=12 time=%time|500]
[SoundOut buf=14 time=%time|500]
[SoundOut buf=15 time=%time|500]
[SoundOut buf=16 time=%time|500]
[eval exp="f.buf7=''"]
[eval exp="f.buf8=''"]
[endmacro]
[macro name=SoundAllOut2]
[ExVoice1Clear]
[ExVoice2Clear]
[SoundOut buf=0 time=%time|500]
[SoundOut buf=1 time=%time|500]
[SoundOut buf=2 time=%time|500]
[SoundOut buf=3 time=%time|500]
[SoundOut buf=4 time=%time|500]
[SoundOut buf=5 time=%time|500]
[SoundOut buf=6 time=%time|500]
[SoundOut buf=7 time=%time|500]
[SoundOut buf=8 time=%time|500]
; [SoundOut buf=9 time=%time|500]
[SoundOut buf=10 time=%time|500]
[SoundOut buf=11 time=%time|500]
[SoundOut buf=12 time=%time|500]
[SoundOut buf=14 time=%time|500]
[SoundOut buf=15 time=%time|500]
[SoundOut buf=16 time=%time|500]
[eval exp="f.buf7=''"]
[eval exp="f.buf8=''"]
[endmacro]
[macro name=SoundAllStop]
[ExVoice1Clear]
[ExVoice2Clear]
[stopse buf=0]
[stopse buf=1]
[stopse buf=2]
[stopse buf=3]
[stopse buf=4]
[stopse buf=5]
[stopse buf=6]
[stopse buf=7]
[stopse buf=8]
[stopse buf=9]
[stopse buf=10]
[stopse buf=11]
[stopse buf=12]
[stopse buf=14]
[stopse buf=15]
[stopse buf=16]
[eval exp="f.buf7=''"]
[eval exp="f.buf8=''"]
[eval exp="seVolumeReset()"]
[endmacro]
[macro name=SoundAllStop2]
[ExVoice1Clear]
[ExVoice2Clear]
[stopse buf=0]
[stopse buf=1]
[stopse buf=2]
[stopse buf=3]
[stopse buf=4]
[stopse buf=5]
[stopse buf=6]
[stopse buf=7]
[stopse buf=8]
; [stopse buf=9]
[stopse buf=10]
[stopse buf=11]
[stopse buf=12]
[stopse buf=14]
[stopse buf=15]
[stopse buf=16]
[eval exp="f.buf7=''"]
[eval exp="f.buf8=''"]
[eval exp="seVolumeReset()"]
[endmacro]
[iscript]
function seVolumeReset()
{
for(var i=0; i<9 ;i++){
kag.se[i].volume = 100;
}
for(var i=10; i<13 ;i++){
kag.se[i].volume = 100;
}
}
[endscript]
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
;BGM入れ替え
[macro name=BgmExChange]
[if exp="kag.skipMode==4"]
[playbgm storage=%storage]
[bgmopt volume=%volume|100]
[else]
[xchgbgm storage=%storage loop=true time=%time overlap=%time volume=%volume|100]
[endif]
[endmacro]
[macro name="BgmFadeOut"]
[if exp="kag.skipMode==4 || tf.afterLoad==true"]
[stopbgm]
[else]
[fadeoutbgm time=%time|1000]
[endif]
[endmacro]
[macro name="BgmFadeIn"]
[if exp="kag.skipMode==4"]
[playbgm storage=%storage]
[else]
[fadeinbgm storage=%storage time=%time|1000]
[endif]
[endmacro]
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
;選択肢
[iscript]
var optionLocate=[[272],[220, 284],[216, 272, 328],[200, 252, 304, 356],[180, 226, 272, 318, 364],[160,204,248,292,336,380]];
function hideOtherOption(num){
for(var i=0 ; i<f.選択肢数 ; i++){
if(i != num) kag.fore.messages[3].links[i].object.visible = false;
}
}
function getTop(num, pos){
var center = 380;
var d = 50 - num * 2;
var tmp = (num * 2 - 1) * d;
return center - (tmp \ 2) + ((pos-1)*2-1) * d;
}
[endscript]
[macro name=SelectStart]
[eval exp="tf.alflg=true" cond="tf.afterLoad2==true"]
[ExtasyCountCancel]
;ロード直後の処理
[if exp="tf.afterLoad==true"]
[ExecAfterLoad]
; [wait time=100 cond="sf.effectMovieMode==0 && kag.movies[0].lastStatus=='play'"]
; [pausevideo slot=0 cond="sf.effectMovieMode==0 && kag.movies[0].lastStatus=='play'"]
; [eval exp="tf.afterLoad=false"]
; [Sound buf=2 storage="dummy" cond="kag.bgVoice[0]!='' && (f.ボイス再生行==0 || +f.voicePlayBuf!=2)"]
; [Sound buf=5 storage="dummy" cond="kag.bgVoice[1]!='' && (f.ボイス再生行==0 || +f.voicePlayBuf!=5)"]
[endif]
[CR]
[backlay]
[layopt layer=message0 page=back visible=false]
[layopt layer=message1 page=back visible=false]
[freeimage page=back layer=3]
[eval exp="systembutton_object.backButtons[systembutton_object.btnWinUpDown].visible=false"]
[eval exp="f.選択肢識別子 = kag.conductor.curStorage + ':' + kag.conductor.curLine"]
[eval exp="f.選択肢表示中 = 1"]
[style autoreturn=false]
[nowait]
[eval exp="f.選択肢数 = +mp.option"]
[current page=back layer="message3"]
[endmacro]
[macro name=SelectEnd]
[if exp="tf.alflg==true"]
[position layer="message3" page=back left=0 top=0 width=1366 height=768 color=0x000000 opacity=0 frame=""]
[trans method=crossfade time=500]
[else]
[trans method=crossfade time=250 cond="sf.effectFade==1"]
[trans method=crossfade time=0 cond="sf.effectFade==0"]
[endif]
[eval exp="tf.alflg==false"]
[wt]
[endnowait]
[style autoreturn=true]
[record]
[s]
[endmacro]
[macro name=SelectOption]
[eval exp="tf.pos = (mp.pos!==void)? mp.pos : mp.num"]
; [eval exp="tf.y = optionLocate[f.選択肢数-1][tf.pos]"]
[eval exp="tf.y = getTop(f.選択肢数,tf.pos)"]
[locate x=253 y=&tf.y]
[button2 graphic="select_frame" target=%target text=%text color=0x00ffff cond="(sf.選択肢[f.選択肢識別子 + ':' + mp.num] == 1) &&(kag.changeColorAlreadyReadText == 1)"]
[button2 graphic="select_frame" target=%target text=%text color=0xffffff cond="(sf.選択肢[f.選択肢識別子 + ':' + mp.num] == void)||(kag.changeColorAlreadyReadText == 0)"]
[eval exp="f.selectbuf[mp.num] = mp.text"]
[eval exp="storeHistory(mp.text)"][hr]
[endmacro]
[macro name=OptionTarget]
; [eval exp=" kag.fore.messages[3].links[mp.num-1].object.imageLeft = -kag.fore.messages[3].links[mp.num-1].object.width"]
[locklink]
[eval exp="hideOtherOption(mp.num-1)"]
[backlay]
[current page=back layer="message3"]
[er]
[if exp="mp.visible===void || +mp.visible==1"]
[eval exp="systembutton_object.backButtons[systembutton_object.btnWinUpDown].visible=true"]
[layopt layer=message0 page=back visible=true]
[layopt layer=message1 page=back visible=true]
[endif]
[trans method=crossfade time=250 cond="sf.effectFade==1"]
[trans method=crossfade time=0 cond="sf.effectFade==0"]
[wt]
[cm][hr]
[eval exp="storeHistory('――' + f.selectbuf[mp.num] + 'を選択――――')"]
[hr][hr][hr]
[current page=fore layer=message1]
[eval exp="sf.選択肢[f.選択肢識別子 + ':' + mp.num] = 1"]
[eval exp="f.選択肢表示中 = 0"]
[ExtasyCount cond="f.inHScene"]
[label]
; [ExecAfterLoad2 cond="tf.afterLoad2==true"]
[endmacro]
[macro name=/SelectOption]
[SelectOptionEnd]
[endmacro]
[iscript]
function storeHistory(str){
for(var i = 0; i < str.length; i++){
kag.historyLayer.store(str[i]);
}
}
[endscript]
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
[iscript]
function getVolumeImageFile(id,mute,mode){
var str = ["config_item_vol","config_item_per"];
if(mute==0){
if(+id<10){
return str[mode] + "00" + id;
}else if(+id<100){
return str[mode] + "0" + id;
}else{
return str[mode] + "100";
}
}else{
if(+id<10){
return str[mode] + "m00" + id;
}else if(+id<100){
return str[mode] + "m0" + id;
}else{
return str[mode] + "m100";
}
}
}
function shoukoFaceFile(){
if(f.nowShowingFaceFile!==void && f.nowShowingFaceFile!=""){
if(f.nowShowingFaceFile[2]=="c"){
if(+sf.翔子眼鏡無し==1){
if(Storages.isExistentStorage(f.nowShowingFaceFile+"@.png")){
kag.fore.messages[2].loadImages(f.nowShowingFaceFile+"@");
kag.back.messages[2].loadImages(f.nowShowingFaceFile+"@");
}else{
kag.fore.messages[2].loadImages(f.nowShowingFaceFile);
kag.back.messages[2].loadImages(f.nowShowingFaceFile);
}
}else{
kag.fore.messages[2].loadImages(f.nowShowingFaceFile);
kag.back.messages[2].loadImages(f.nowShowingFaceFile);
}
}
}
}
[endscript]
[return]