sleeping-princess-in-the-attic/data/Macro_Action.ks
2024-04-17 02:37:35 -05:00

1193 lines
45 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

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

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

*インクリ系
[macro name="dActIncrease"]
;-------------------パーミッション------------------------------
;M1のWQ1はインクリーズ系全てのベースになる。かならず日付を残す事。更新日2022年6月2日
;パーミッション。勝手に値が増えるIncrease・自分でクリックし値を増やすClick・押しっぱで動画が動くDrag・動かないNone
[eval exp="Permission = 'Increase'"]
[eval exp="tf.tempActFlag = f.ActFlag[tf.NudeType][tf.InsertType][tf.ActType][f.StoreLV[tf.NudeType][tf.InsertType][tf.ActType]]"]
;-------------------------パラメータ処理------------------------------------
;プログラムを簡略化する為にテンポラリ配列に一旦格納する。
[eval exp = "tf.TempArray = tf.ActParam[tf.NudeType][tf.InsertType][tf.ActType][f.StoreLV[tf.NudeType][tf.InsertType][tf.ActType]]"][パラメータ処理]
;--------------------★二回目以降またはギャラリー-----------------------------
;通常のムービー描画用マクロ。
[if exp="(tf.tempActFlag > 0 || tf.galflag == 1) && f.galkaisou == 0"]
;カメラ変更をしない為の変数。1の時、この計算を飛ばす
[if exp="tf.DisableCamChange != 1"]
;改定 射精回数によりカメラを制御する。ただしギャラリー中を除く。
[if exp="tf.tempTotalStoreEX == 0 && tf.galflag != 1 && f.ActOmit != 1"][eval exp = "tf.tempActFlag = 1"][eval exp="f.camera = 1"]
[elsif exp="tf.tempTotalStoreEX == 1 && tf.galflag != 1 && f.ActOmit != 1"][if exp="tf.tempActFlag == 1"][eval exp = "tf.tempActFlag = 2"][else][eval exp = "tf.tempActFlag = 1"][endif][eval exp="f.camera = (tf.tempActFlag) % 3"]
[else][eval exp = "tf.tempActFlag += 1"][eval exp="f.camera = (tf.tempActFlag) % 3"]
[endif]
[endif]
;動画再生・ボイス再生の順。ムービーの遅れを考慮している。
[dPlayMovie]
;呼吸を初期化する しまった…この位置じゃないとダメじゃないかムービーが出て、factを計算し、リザーブを得てボイスにわたすんだから 2023年8月30日
[dCurrentVoice]
[dPlayVoice]
;-----------------------------★初回------------------------------------------
[else]
;一度アクションを実行したというフラグを立てる。
[eval exp = "tf.tempActFlag = 1"][dSetStoreGallery]
;カメラ計算
[eval exp="f.camera = (tf.tempActFlag) % 3"]
;--------------------トークとムービー-----------------------------------
[STALKSTART][dMainTalk][STALKEND]
[endif]
;オールカメラ
[if exp="f.camswitch==1"][cammacro][endif]
;--------------------ジャンプ------------------------------------------------
;actFlagを元に戻す
[eval exp="f.ActFlag[tf.NudeType][tf.InsertType][tf.ActType][f.StoreLV[tf.NudeType][tf.InsertType][tf.ActType]] = tf.tempActFlag"]
;再選択用。再選択の時回想が流れてしまうのを阻止する。
[if exp="tf.Regalkaisou == 1"]
[eval exp="f.galkaisou = 1"]
[eval exp="tf.Regalkaisou = 0"]
[endif]
;必要。無いと素通りされる。
[jump storage="first.ks" target="&f.button"]
;----------------------------------------------------------------------------
[endmacro]
*クリック系
[macro name="dActClick"]
;---------------------------------------------------------------------------
;2022年4月1日 M2系のWQ1はクリック・マルチクリック系のベースになる。重要なので、コメント等含めわかりやすく書いてね。
;-------------------------パーミッション------------------------------------
;パーミッションは最初に設定する必要がある。前の行動が残ったままウェイトされるので、ドラッガブルの状態でクリッカブルのアクションが発動するコンマ数秒のバグが起こる為。
;パーミッション。勝手に値が増えるIncrease・自分でクリックし値を増やすClick・押しっぱで動画が動くDrag・動かないNone。マルチクリックもClickだよ。
[eval exp="Permission = 'Click'"]
[eval exp="tf.tempActFlag = f.ActFlag[tf.NudeType][tf.InsertType][tf.ActType][f.StoreLV[tf.NudeType][tf.InsertType][tf.ActType]]" cond ="lClicked == 0"]
;-------------------------座標設定------------------------------------
;クリッカブル座標設定。がX 1がY 2がX…という風にループされる。
;座標が存在すると自動的にbuttonmacroによりマルチクリッカブルに変化する。
;無い場合は、従来の全画面クリックだ。
;マルチクリッカブルはあまり使わないが性器観察系では役に立つだろう。
;[eval exp="Clickable[0] = 570"][eval exp="Clickable[1] = 360"]
;[eval exp="Clickable[2] = 220"][eval exp="Clickable[3] = 320"]
;[eval exp="Clickable[4] = 20"][eval exp="Clickable[5] = 30"]
;-------------------------指挿入系にかかる------------------------------------
;クリッカブルにかかる初期化をヒューマンエラーを避ける為マクロ化。
[dInitialClick]
;対処が場当たり的でちょっとあれなんだけど、クリックモードの時にキスフラグが経ってたらそのままキスになったりするのを防ぐ
[eval exp="tf.MClickMode=''"]
;特定のスキンやクリックの時にエフェクト変えたいならここに入れる
[if exp="(f.act== 'S6WQ3' && tf.inside == '_Inside')"]
[eval exp="tf.MClickMode='K'"]
[endif]
;-------------------------パラメータ処理------------------------------------
;プログラムを簡略化する為にテンポラリ配列に一旦格納する。
[eval exp = "tf.TempArray = tf.ActParam[tf.NudeType][tf.InsertType][tf.ActType][f.StoreLV[tf.NudeType][tf.InsertType][tf.ActType]]"][パラメータ処理]
;--------------------★二回目以降またはギャラリー-----------------------------
;他と違い、lClickedが導入される。クリックされた時は回想がオンでも必ずクリックシーンに行く為。
[if exp="lClicked != 0 || ( (tf.tempActFlag > 0 || tf.galflag == 1) && f.galkaisou == 0 )"]
;f.cameraを計算する。以前まではムービー準備領域で行っていたが、NMからアクション別にカメラを計算するのでこうせざるをえない
;クリッカブルではない(ゼロ)の時、アクション使用回数を増やす
[if exp="lClicked == 0"]
;カメラ変更をしない為の変数。1の時、この計算を飛ばす
[if exp="tf.DisableCamChange != 1"]
;改定 射精回数によりカメラを制御する。ただしギャラリー中を除く。
[if exp="tf.tempTotalStoreEX == 0 && tf.galflag != 1 && f.ActOmit != 1"][eval exp = "tf.tempActFlag = 1"][eval exp="f.camera = 1"]
[elsif exp="tf.tempTotalStoreEX == 1 && tf.galflag != 1 && f.ActOmit != 1"][if exp="tf.tempActFlag == 1"][eval exp = "tf.tempActFlag = 2"][else][eval exp = "tf.tempActFlag = 1"][endif][eval exp="f.camera = (tf.tempActFlag) % 3"]
[else][eval exp = "tf.tempActFlag += 1"][eval exp="f.camera = (tf.tempActFlag) % 3"]
[endif]
[endif]
[else]
;Mクリックでのf.camera計算。lClickedは観察系の時、必ず1以上になる。クリッカブルと競合する為、競合回避の為マイナス1している
;[eval exp="f.camera = (tf.tempActFlag + lClicked ) % 3"]
[endif]
;---------------------------------------------------------------------------------
;動画再生。クリッカブル用ムービーのdPlayMovie_Clickと-Kをつけた呼吸用のdPlayMovie_Click_呼吸の2種類がある。
[if exp="lClicked == 0"]
;行為選んだ時。呼吸から始まる
[eval exp="tf.nodamage = 1"]
[dPlayMovie_Click_呼吸]
[dWetSet]
[感度表示]
[else]
;グラフ描写とパラメータ変動
[dSetParam]
;クリック回数1以上
[dPlayMovie_Click]
;クリッカブルは効果音・ボイスともにクリックごとに鳴る為このマクロが必要。
[指挿入効果音][指挿入ボイス]
;initialtimeは待ち時間。この時間は受付不能。totaltimeはクリックした時に表示させたい部分の長さ。50Fの時150050*30F)。シナリオは表示させたい動画
[指挿入メイン initialtime = "200" totaltime = "&(kag.movies[0].numberOfFrame*30 - 300)" scenario = "&f.act"]
[endif]
;呼吸を初期化する
[dCurrentVoice]
;ちょっと力技すぎて嫌なんだけど…スキン用のボイス設定if
[if exp="f.act=='S3WQ2' && f.InsideFlag == 1"]
;スキンの物
[else]
;通常
;--------------------クリック回数によりセリフ変化-------------------------------
;クリック回数が一定以上の時、待機セリフが変化する
[if exp="tf.clicknum >= 6"]
;tired属性が無い場合は通常ボイスを流す。noloopは勝手に通常ボイスが流れる為
[dVoicenoloop name="&('Tired_'+f.act)"]
;クリック数がTiredに満たないならKDを流す。KDが無いなら通常待機ボイス
[elsif exp="lClicked != 0"]
;SP以上 再生中のストレージがダメージ 更にダメージボイスが存在するならば
;;[if exp="f.SPgauge > 60 && isExistMovieStorage('VC_' + f.act +'-KD.ogg') && kag.movies[0].storage.indexOf('Damaged') != -1"]
;; [dVoice name="&('VC_' + f.act +'-KD')"]
;;[else]
;; [dVoice name="&('VC_'+f.act+'-K')"]
;;[endif]
[dPlayVoice-K]
[else]
[dPlayVoice]
[endif]
[endif]
;クリック回数初期化
[eval exp= "tf.clicknum = 0"]
;クリック系はここにボイスないと指挿入で上書きされちゃう
;----------------------------★初回----------------------------------------------
[else]
;一度アクションを実行したというフラグを立てる。
[eval exp = "tf.tempActFlag = 1"][dSetStoreGallery]
;f.cameraを計算する。以前まではムービー準備領域で行っていたが、NMからアクション別にカメラを計算するのでこうせざるをえない。
;クリッカブルではないゼロの時、アクション使用回数を増やす。初回なので使われる事は無いのだが、2回目以降と形式を合わせている。
[if exp="lClicked == 0"]
;f.camera計算。1がA 2がB 0がC。
[eval exp="f.camera = (tf.tempActFlag) % 3"]
[else]
;f.camera計算。1がA 2がB 0がC。
;lClickedは観察系の時、必ず1以上になる。クリッカブルと競合する為、競合回避の為マイナス1している
[eval exp="f.camera = (tf.tempActFlag + lClicked - 1 ) % 3"]
[endif]
;グラフ描写とパラメータ変動。初回は必ず消費がない為tf.nodamageで制御する。しかしこの方法ではtf.actexpが計算されず感度が表示されない為、しょうがなくここに配置
[eval exp="tf.nodamage = 1"]
[eval exp = "tf.ActExp = Math.pow((f.C_EXP+f.V_EXP+f.I_EXP+f.S_EXP),( 1 - (tf.EXNumDay * 0.06)))"]
[dSetParam]
;-------------------------トークとムービー--------------------------------------
[STALKSTART][dMainTalk][STALKEND]
[endif]
[感度表示]
[dSetParam_Math]
[dWetSet]
[感度表示]
;ノーダメージ解除
[eval exp="tf.nodamage = 0"]
;あれ…これ要るのでは これがないと悪い子から胸に言った時に前の表示を引き継ぐ
;tf.WetClicked=0はクリック時にwetが累積されないのを解決。これがないとこのタイミングで二重にwet計算される…変数増やしたくなかったが
[if exp="lClicked > 0 && tf.WetClicked==0"][dWetSet][eval exp="tf.WetClicked=0"][endif]
[感度表示]
;-------------------ジャンプ------------------------------------------------
;actFlagを元に戻す
[eval exp="f.ActFlag[tf.NudeType][tf.InsertType][tf.ActType][f.StoreLV[tf.NudeType][tf.InsertType][tf.ActType]] = tf.tempActFlag"]
;再選択用。再選択の時回想が流れてしまうのを阻止する。
[if exp="tf.Regalkaisou == 1"]
[eval exp="f.galkaisou = 1"]
[eval exp="tf.Regalkaisou = 0"]
[endif]
;クリックの場合前の物を引き継がないように初期化
[eval exp="lPlayVoice = 'breath'"]
;必要。無いと素通りされる。
[jump storage="first.ks" target="&f.button"]
;----------------------------------------------------------------------------
[endmacro]
*マルチクリック系
[macro name="dActMultiClick"]
;---------------------------------------------------------------------------
;H1WQ1は複数クリック系全てのベースになる。重要なので、コメント等含めわかりやすく書いてね。2022年4月1日
;-------------------------パーミッション------------------------------------
;パーミッションは最初に設定する必要がある。前の行動が残ったままウェイトされるので、ドラッガブルの状態でクリッカブルのアクションが発動するコンマ数秒のバグが起こる為。
;パーミッション。勝手に値が増えるIncrease・自分でクリックし値を増やすClick・押しっぱで動画が動くDrag・動かないNone。マルチクリックもClickだよ。
[eval exp="Permission = 'Click'"]
[eval exp="tf.tempActFlag = f.ActFlag[tf.NudeType][tf.InsertType][tf.ActType][f.StoreLV[tf.NudeType][tf.InsertType][tf.ActType]]" cond ="lClicked == 0"]
;-------------------------座標設定------------------------------------
;クリッカブル座標設定。がX 1がY 2がX…という風にループされる。
;座標が存在すると自動的にbuttonmacroによりマルチクリッカブルに変化する。
;無い場合は、従来の全画面クリックだ。
;マルチクリッカブルはあまり使わないが性器観察系では役に立つだろう。
;-------------------------指挿入系にかかる------------------------------------
;クリッカブルにかかる初期化をヒューマンエラーを避ける為マクロ化。
[dInitialClick]
;-------------------------パラメータ処理------------------------------------
;プログラムを簡略化する為にテンポラリ配列に一旦格納する。
[eval exp = "tf.TempArray = tf.ActParam[tf.NudeType][tf.InsertType][tf.ActType][f.StoreLV[tf.NudeType][tf.InsertType][tf.ActType]]"][パラメータ処理]
;--------------------★二回目以降またはギャラリー-----------------------------
[if exp="lClicked != 0 || ( (tf.tempActFlag > 0 || tf.galflag == 1) && f.galkaisou == 0 )"]
;f.cameraを計算する。以前まではムービー準備領域で行っていたが、NMからアクション別にカメラを計算するのでこうせざるをえない
;クリッカブルではない(ゼロ)の時、アクション使用回数を増やす
[if exp="lClicked == 0"]
;[eval exp="f.camera = lClicked % 3"]
;一番固定 ちなみに0じゃないよ。3で割ったあまりだから0は3番になっちゃうからね
[eval exp="f.camera = 1"]
[dPlayMovie_Click_呼吸]
;呼吸を初期化する しまった…この位置じゃないとダメじゃないか2023年8月30日
[dCurrentVoice]
[dPlayVoice]
[else]
;タリア編のみ、マルチクリックに別の文章が導入される。
[if exp="tf.Tariaflag == 1"]
[SleepTalkSTART]
[SleepTalk_Main]
[SleepTalkEND]
;そうかこれ必要じゃんね
[dWetSet]
[endif]
;マルチクリックの時のみlClicked-1の値。lClickedはMacro_Buttonにて計算される。MultiClickCameraMathはoverrideにて定義され、3の時、それの時を返す。今までで割って余り出してたからその名残
[eval exp="f.camera = MultiClickCameraMath(lClicked)"]
[dPlayMovie_Click]
[指挿入効果音]
;マルチクリックの時のみ、クリック回数の累積が行われる。ハズレを押した時の為の累積だ。この累積により当たりを押した時に倍率がかかる
;ただし、この倍率にもゲームスピードがかかる(低い倍率で上げまくって高い倍率でワンパンできちゃうので)
[eval exp="tf.MclickNum+=(1 * sf.GameSpeed)"]
;初回クリックのみボイスを出す。二回目以降はダメージボイス
[if exp="tf.Tariaflag == 1 || !(isExistMovieStorage('Click_' + f.act + 'A.ogg'))"]
[観察ボイス]
[elsif exp="tf.clicknum <= 0"]
[指挿入ボイス]
[else]
[観察ボイス]
[endif]
;;グラフ描写とパラメータ変動 無いと動きません
[dSetParam]
;クリッカブルは効果音・ボイスともにクリックごとに鳴る為このマクロが必要。
;initialtimeは待ち時間。この時間は受付不能。totaltimeはクリックした時に表示させたい部分の長さ。50Fの時150050*30F)。シナリオは表示させたい動画
[指挿入メイン initialtime = "500" totaltime = "&(kag.movies[0].numberOfFrame*30 - 300)" scenario = "&f.act"]
;--------------------クリック回数によりセリフ変化-------------------------------
;クリック回数が一定以上の時、待機セリフが変化する…と思ったんだけど、観察系は一個しかないしPG的に不都合があるので廃止したよ
[if exp="tf.Tariaflag == 1"]
;タリア編
[if exp="tf.clicknum == 0"][dPlayVoice][endif]
[elsif exp="lClicked != 0"]
;SP以上 再生中のストレージがダメージ 更にダメージボイスが存在するならば
[if exp="isExistMovieStorage('VC_' + f.act +'-KD.ogg') && kag.movies[0].storage.indexOf('Damaged') != -1"]
[dVoice name="&('VC_' + f.act +'-KD')"]
[else]
[dVoice name="&('VC_'+f.act+'-K')"]
[endif]
[else]
[dPlayVoice]
[endif]
;クリック回数初期化
[eval exp= " tf.clicknum = 0"]
[endif]
;----------------------------★初回----------------------------------------------
[else]
;一度アクションを実行したというフラグを立てる。
[eval exp = "tf.tempActFlag = 1"][dSetStoreGallery]
;f.cameraを計算する。以前まではムービー準備領域で行っていたが、NMからアクション別にカメラを計算するのでこうせざるをえない。
;クリッカブルではないゼロの時、アクション使用回数を増やす。初回なので使われる事は無いのだが、2回目以降と形式を合わせている。
[if exp="lClicked == 0"]
;f.camera計算。1がA 2がB 0がC。
[eval exp="f.camera = (lClicked) % 3"]
[else]
;f.camera計算。1がA 2がB 0がC。
;マルチクリックの時のみlClicked-1の値。lClickedはMacro_Buttonにて計算される。
[eval exp="f.camera = MultiClickCameraMath(lClicked)"]
[endif]
;グラフ描写とパラメータ変動。初回は必ず消費がない為tf.nodamageで制御する。しかしこの方法ではtf.actexpが計算されず感度が表示されない為、しょうがなくここに配置
[eval exp="tf.nodamage = 1"]
[eval exp = "tf.ActExp = Math.pow((f.C_EXP+f.V_EXP+f.I_EXP+f.S_EXP),( 1 - (tf.EXNumDay * 0.06)))"]
[dSetParam]
[eval exp="tf.nodamage = 0"]
;-------------------------トークとムービー--------------------------------------
[STALKSTART][dMainTalk][STALKEND]
[endif]
[感度表示]
[dSetParam_Math]
;あれ…これ要るのでは これがないと悪い子から胸に言った時に前の表示を引き継ぐ
[if exp="lClicked!=0 && tf.WetClicked==0"]
[dWetSet]
[eval exp="tf.WetClicked=0"]
[endif]
[感度表示]
;-------------------ジャンプ------------------------------------------------
;actFlagを元に戻す
[eval exp="f.ActFlag[tf.NudeType][tf.InsertType][tf.ActType][f.StoreLV[tf.NudeType][tf.InsertType][tf.ActType]] = tf.tempActFlag"]
;再選択用。再選択の時回想が流れてしまうのを阻止する。
[if exp="tf.Regalkaisou == 1"]
[eval exp="f.galkaisou = 1"]
[eval exp="tf.Regalkaisou = 0"]
[endif]
;タリア
[layopt layer=message4 visible=false]
;必要。無いと素通りされる。
[jump storage="first.ks" target="&f.button"]
;----------------------------------------------------------------------------
[endmacro]
*ドラッグ系
[macro name="dActDrag"]
;D1のWQ2はドラッグ系全てのベースになる。かならず日付を残す事 2022年3月23日
;ドラッガブルのボタン表示はbuttonmacroで行われる。
[eval exp="tf.nodamage = 1"]
;-------------------------指挿入系にかかる------------------------------------
[dInitialClick]
[eval exp="tf.tempActFlag = f.ActFlag[tf.NudeType][tf.InsertType][tf.ActType][f.StoreLV[tf.NudeType][tf.InsertType][tf.ActType]]"]
;-------------------------パラメータ処理------------------------------------
;プログラムを簡略化する為にテンポラリ配列に一旦格納する。
[eval exp = "tf.TempArray = tf.ActParam[tf.NudeType][tf.InsertType][tf.ActType][f.StoreLV[tf.NudeType][tf.InsertType][tf.ActType]]"][パラメータ処理]
;-----------------------★二回目以降またはギャラリー-----------------------------
[if exp="lDragged != 0 || ((tf.tempActFlag > 0 || tf.galflag == 1) && f.galkaisou == 0)"]
;f.cameraを計算する。以前まではムービー準備領域で行っていたが、NMからアクション別にカメラを計算するのでこうせざるをえない
;クリッカブルではない(ゼロ)の時、アクション使用回数を増やす
[if exp="lDragged == 0"]
;カメラ変更をしない為の変数。1の時、この計算を飛ばす
[if exp="tf.DisableCamChange != 1"]
;改定 射精回数によりカメラを制御する。ただしギャラリー中を除く。
[if exp="tf.tempTotalStoreEX == 0 && tf.galflag != 1 && f.ActOmit != 1"][eval exp = "tf.tempActFlag = 1"][eval exp="f.camera = 1"]
[elsif exp="tf.tempTotalStoreEX == 1 && tf.galflag != 1 && f.ActOmit != 1"][if exp="tf.tempActFlag == 1"][eval exp = "tf.tempActFlag = 2"][else][eval exp = "tf.tempActFlag = 1"][endif][eval exp="f.camera = (tf.tempActFlag) % 3"]
[else][eval exp = "tf.tempActFlag += 1"][eval exp="f.camera = (tf.tempActFlag) % 3"]
[endif]
[endif]
[endif]
;カメラ計算----------------------------------------------------------
[eval exp="f.camera = (tf.tempActFlag) % 3"]
;D3WQ1だけinaoutあるんでこっち
[if exp="f.act == 'D3WQ1'"]
[dPlayMovie_Click_inout_呼吸]
[else]
;マクロ化。クリッカブル用のdPlayMovie_ClickとdPlayMovie_Click呼吸の2種類がある。
[dPlayMovie_Click_呼吸]
[endif]
;呼吸を初期化する しまった…この位置じゃないとダメじゃないかムービーが出て、factを計算し、リザーブを得てボイスにわたすんだから 2023年8月30日
[dCurrentVoice]
;ボイス
[dPlayVoice]
;-------------------------★初回--------------------------------
[else]
;初回フラグとカメラ計算
[eval exp = "tf.tempActFlag = 1"][dSetStoreGallery]
;カメラ計算
[eval exp="f.camera = (tf.tempActFlag) % 3"]
;グラフ描写とパラメータ変動。初回は必ず消費がない為tf.nodamageで制御する。しかしこの方法ではtf.actexpが計算されず感度が表示されない為、しょうがなくここに配置
;--------------------------Aトーク前半--------------------------------------
;マクロ化。クリッカブル用のdPlayMovie_ClickとdPlayMovie_Click呼吸の2種類がある。
[STALKSTART][dMainTalk][STALKEND]
[endif]
;ドラッグ系の場合前の表示を引き継いじゃうので不本意だがここに設置
;[eval exp = "tf.ActExp = Math.pow((f.C_EXP+f.V_EXP+f.I_EXP+f.S_EXP),( 1 - (tf.EXNumDay * 0.06)))"]
;グラフ描写とパラメータ変動
;[dSetParam]
[感度表示]
[eval exp="tf.nodamage = 1"]
[eval exp = "tf.ActExp = Math.pow((f.C_EXP+f.V_EXP+f.I_EXP+f.S_EXP),( 1 - (tf.EXNumDay * 0.06)))"]
[dSetParam]
[eval exp="tf.nodamage = 0"]
;;とんでもなく特殊tf.nodamageの影響で感度表示がセットでされない為ここで行う
;インサートされておらず、かつ悪い子を参照する物のみこれが必要になる!!!
[dWetSet]
[感度表示]
[eval exp="tf.nodamage = 0"]
;-------------------Dジャンプ------------------------------------------------
;パーミッション。勝手に値が増えるIncrease・自分でクリックし値を増やすClick・押しっぱで動画が動くDrag・動かないNone
;これDragと思いがちだけど違うDragには、ボタン進入時にDragになる。
[eval exp="Permission = 'PreDrag'"]
;actFlagを元に戻す
[eval exp="f.ActFlag[tf.NudeType][tf.InsertType][tf.ActType][f.StoreLV[tf.NudeType][tf.InsertType][tf.ActType]] = tf.tempActFlag"]
;再選択用。再選択の時回想が流れてしまうのを阻止する。
[if exp="tf.Regalkaisou == 1"]
[eval exp="f.galkaisou = 1"]
[eval exp="tf.Regalkaisou = 0"]
[endif]
;必要。無いと素通りされる。
[jump storage="first.ks" target="&f.button"]
;---------------------ドラッグ系終了----------------------------------------
[endmacro]
*休憩系
[macro name="dActRest"]
;-------------------パーミッション------------------------------
;休憩は若干特殊。動画が一個だけなので、playvideoの部分でPointMovieを使ってる 2022年6月3日
;パーミッション。勝手に値が増えるIncrease・自分でクリックし値を増やすClick・押しっぱで動画が動くDrag・動かないNone
[eval exp="Permission = 'None'"]
[eval exp="tf.tempActFlag = f.ActFlag[tf.NudeType][0][20][f.StoreLV[tf.NudeType][0][20]]"]
;更に、tf.Vis_Kandoがになるものの一つ。感度表示はNONEの時行われないからいらんきもするけどね
[eval exp = "tf.Vis_Kando = 0"]
[eval exp="tf.ComboEjacCount=0"]
[eval exp="tf.ComboOrgaCount=0"]
;-------------------------パラメータ処理------------------------------------
;プログラムを簡略化する為にテンポラリ配列に一旦格納する。
[eval exp = "tf.TempArray = tf.ActParam[tf.NudeType][0][20][f.StoreLV[tf.NudeType][0][20]]"]
;休憩ではパラメータ処理必要ない。最後に回復させるから
[パラメータ処理]
;--------------------★二回目以降またはギャラリー-----------------------------
;通常のムービー描画用マクロ。
[if exp="(tf.tempActFlag > 0 || tf.galflag == 1) && f.galkaisou == 0"]
;選択する度に、行為ごとの回数をプラスし、更にカメラ計算を行う。
[eval exp = "tf.tempActFlag += 1"][eval exp="f.camera = (tf.tempActFlag) % 3"]
;動画再生・ボイス再生の順。ムービーの遅れを考慮している。
[dPointmovie point = "&(f.act+'A')" loop = "true"]
;呼吸を初期化する しまった…この位置じゃないとダメじゃないかムービーが出て、factを計算し、リザーブを得てボイスにわたすんだから 2023年8月30日
[dCurrentVoice]
[dVoicenoloop name="&('VC_'+f.act)"]
[layopt layer=message0 page=fore visible=false]
[layopt layer=message1 page=fore visible=false]
;-----------------------------★初回------------------------------------------
[else]
;一度アクションを実行したというフラグを立てる。
[eval exp = "tf.tempActFlag = 1"][eval exp = "sf.StoreGallery[tf.NudeType][0][20][f.StoreLV[tf.NudeType][0][20]]=1"]
;カメラ計算
[eval exp="f.camera = (tf.tempActFlag) % 3"]
;--------------------トークとムービー-----------------------------------
[STALKSTART][dMainTalk][STALKEND]
[endif]
;オールカメラ
[if exp="f.camswitch==1"][cammacro][endif]
;--------------------ジャンプ------------------------------------------------
;actFlagを元に戻す
[eval exp="f.ActFlag[tf.NudeType][0][20][f.StoreLV[tf.NudeType][0][20]] = tf.tempActFlag"]
;HP回復処理。
;休憩のレベルはHP回復量にて決まる。
[KAIWASTART][dHeal][KAIWAEND jump=false]
;再選択用。再選択の時回想が流れてしまうのを阻止する。
[if exp="tf.Regalkaisou == 1"]
[eval exp="f.galkaisou = 1"]
[eval exp="tf.Regalkaisou = 0"]
[endif]
;必要。無いと素通りされる。
[jump storage="first.ks" target="&f.button"]
;----------------------------------------------------------------------------
[endmacro]
*EX系
[macro name="dActEX"]
;---------------------------------------------------------------------------
;二回目以降をスキップできるようにする。まだ見ていない場合、この値はになる。また、parameter.ksのデバッグで常にスキップ可能になる変数も作成済
[eval exp = "tf.EXskip = tf.tempTotalStoreEX"]
;暴走系は必ずdActEXになる。なぜならEXTOTALでそう設定している為 Partとかは考えなくていいからね
;エクストラEXは射精・絶頂が溜まり過ぎた時用の動画の時等に1になるフラグ dActEXを使いまわしたかったので
[if exp="tf.ActExtraEXFlag == 0"]
;通常版
;EX系を一度でも行ったかというフラグ。ちなみにパート系は行ったことに含まれない
[eval exp="tf.tempActFlag = f.ActEXFlag[tf.NudeType][tf.InsertType][tf.ActType][tf.tempStoreLV]"]
[else]
;射精・絶頂が溜まった時など、通常のものに含まれないけど回数は記録したいExtraEXがここに入る
;+1はfindの特性上見つかってもがありえるので。見つからなかったら-1だから大丈夫
[eval exp="tf.tempActFlag = f.ArrActExtra.find(f.act,0) + 1"]
[eval exp="f.ArrActExtra.add(f.act)"]
[endif]
;---------------------------------------------------------------------------
;ちょっと複雑じゃないか?まず、ギャラリー二回目以降はこっちになる。スキンオンでスキンが存在し、更に所持している時もこっち。
[if exp="((tf.tempActFlag > 0 || tf.galflag == 1) && f.galkaisou == 0) || (tf.tempActFlag > 0 && (f.InsideFlag == 1 && isExistMovieStorage(f.act.substring(0,7)+'_Part.wmv') && ( (sf.SkinCheck.find(f.act,0) >= 0 || tf.CheatSkinList.find(tf.lastfact,0) < 0) || f.SkinAll == 1)))"]
;二回目以降の実行。ムービー描画マクロ。exvoiceにはループする物voiceとしないvoicenoloopがある
;指定射精の時、f.actの値を変更する。それ以外は同じ効果を持つ
[if exp="lReserveMovie != ''"]
[eval exp="f.act=lReserveMovie"]
[exmovie exvoice = "&('VC_'+f.act)" loop = "false"]
[exmovie-K loop = "true"]
;本体だ。EX動画がある場合
[elsif exp="isExistMovieStorage(f.act+'.wmv')"]
[exmovie exvoice = "&('VC_'+f.act)" loop = "false"]
[exmovie-K loop = "true"]
[else]
;実質キス専用のelse 動画が見つからない時はアクセントを探す。更にその後再選択。
[if exp="isExistMovieStorage(f.act+'_Part.wmv')"][exmovie exvoice = "&('VC_'+f.act)" loop = "false"][layopt layer=message0 page=fore visible=false][endif]
;再選択フラグを1にする
[eval exp="tf.ReSelCall = 1"]
[endif]
;実行回数+1 実はストアEXで代用できるのだが、どうせsf.EXF1WQ1も使う為表記を統一
[eval exp = "tf.tempStoreEX += 1" cond = "tf.galflag == 0"]
[layopt layer=message0 page=fore visible=false]
;ギャラリーの時はステータスに加算されない
[if exp="tf.galflag != 1 "][dStatusPlus][endif]
[else]
;初回実行。初回のフラグとsfのフラグ、更に各セーブごとに一度でも射精したかのフラグを立てる星計算とデバッグに必要
;しまった…tempActFlagとtempStoreEXが混在してしまうな でも一度でも行ったかのフラグと射精回数のフラグは別物なんだよね…なんか良い方法ありそうだけど…
[eval exp = "tf.tempActFlag = 1"][eval exp = "tf.tempStoreEX = 1"]
[dSetStoreExGallery]
[eval exp = "f.ActEXFlag[tf.NudeType][tf.InsertType][tf.ActType][tf.tempStoreLV]=1" cond = "tf.galflag == 0 && tf.ActExtraEXFlag == 0"]
;-------------------Aトーク前半---------------------------------------------
[STALKSTART]
;セリフを出す。EXはセリフが前後編に分かれているのでstorymacro内にてexmovieを使わなければならない。
[dMainTalk]
;ステータスプラス
[r][if exp="tf.galflag != 1 "][dStatusPlus][endif]
[STALKEND]
[endif]
;指定射精を0に。
[eval exp="tf.TargetEjac=0"]
;その周の射精回数を記録する配列に現在のEX回数を記録する。
[eval exp = "f.StoreEX[tf.NudeType][tf.InsertType][tf.ActType][tf.tempStoreLV] = tf.tempStoreEX" cond = "tf.galflag == 0"]
;累計の射精回数を記録する配列 習得度のバイアスtf.EXPbias
[eval exp="f.TotalStoreEX[tf.NudeType][tf.InsertType][tf.ActType][tf.tempStoreLV] += 1" cond = "tf.galflag == 0"]
;フェラのレベルのようなEX後に暴走する物
[if exp="tf.arrNonStop.find(&f.act,0) >= 0 && (f.StoreActEXP[tf.NudeType][tf.InsertType][tf.ActType][tf.tempStoreLV] * tf.nextPercent < 100)"]
[eval exp="f.act=f.act.replace(/EX/g,'')"]
[eval exp="Permission = 'Increase'"]
;ここに無いとこれでEXになった時ボタン表示されん
[eval exp = "tf.tempTotalStoreEX = f.TotalStoreEX[tf.NudeType][tf.InsertType][tf.ActType][tf.tempStoreLV]"]
[else]
[eval exp="Permission = 'None'"]
[endif]
;射精・絶頂が溜まり過ぎた時用のフラグを初期化 位置間違うと指定射精と絶頂が同時に発生した時に1のままになるので気をつけて
[eval exp="tf.ActExtraEXFlag = 0"]
;タリア編のエンディング用に回復させたほうがいい
[if exp="(f.act=='EXT2WQ3')"]
[setHP value = 10.0]
[endif]
;星計算の為に、一度でも射精を行ったシーンの計算
[dTotalEX]
;再選択を行う
[if exp="tf.ReSelCall == 1"][dActEXkiss][endif]
[jump storage="first.ks" target="&f.button"]
[endmacro]
*EXPart_呼吸付き
[macro name="dActEX_Part-K"]
;dActEXの初回を消して、ボイス節約のためdCurrentVoiceによる追加。これは、胸のLV1とアナルLV1にしか使われてない
;---------------------------------------------------------------------------
;二回目以降をスキップできるようにする。まだ見ていない場合、この値はになる。また、parameter.ksのデバッグで常にスキップ可能になる変数も作成済
[eval exp = "tf.EXskip = tf.tempTotalStoreEX"]
;EX系を一度でも行ったかというフラグ。ちなみにパート系は行ったことに含まれない
[eval exp="tf.tempActFlag = f.ActEXFlag[tf.NudeType][tf.InsertType][tf.ActType][tf.tempStoreLV]"]
;---------------------------------------------------------------------------
;リザーブボイス書き換え。正当なファイル名付きボイスが終わったら強制的にリザーブボイスに以降する PartにしかなかったりするがEXで使う可能性あるな現時点では使ってないが
[dCurrentVoice]
;二回目以降の実行。ムービー描画マクロ。exvoiceにはループする物voiceとしないvoicenoloopがある
;指定射精の時、f.actの値を変更する。それ以外は同じ効果を持つ
[if exp="lReserveMovie != ''"]
[eval exp="f.act=lReserveMovie"]
[exmovie exvoice = "&('VC_'+f.act)" loop = "false"]
[exmovie-K loop = "true"]
;本体だ。EX動画がある場合
[elsif exp="isExistMovieStorage(f.act+'.wmv')"]
[exmovie exvoice = "&('VC_'+f.act)" loop = "false"]
[exmovie-K loop = "true"]
[else]
;実質キス専用のelse 動画が見つからない時はアクセントを探す。更にその後再選択。
[if exp="isExistMovieStorage(f.act+'_Part.wmv')"][exmovie exvoice = "&('VC_'+f.act)" loop = "false"][layopt layer=message0 page=fore visible=false][endif]
;再選択フラグを1にする
[eval exp="tf.ReSelCall = 1"]
[endif]
;実行回数+1 実はストアEXで代用できるのだが、どうせsf.EXF1WQ1も使う為表記を統一
[eval exp = "tf.tempStoreEX += 1" cond = "tf.galflag == 0"]
[layopt layer=message0 page=fore visible=false]
;ギャラリーの時はステータスに加算されない
[if exp="tf.galflag != 1 "][dStatusPlus][endif]
;指定射精を0に。
[eval exp="tf.TargetEjac=0"]
;その周の射精回数を記録する配列に現在のEX回数を記録する。
[eval exp = "f.StoreEX[tf.NudeType][tf.InsertType][tf.ActType][tf.tempStoreLV] = tf.tempStoreEX" cond = "tf.galflag == 0"]
;累計の射精回数を記録する配列 習得度のバイアスtf.EXPbias、更にボタン表示に使ってる
[eval exp="f.TotalStoreEX[tf.NudeType][tf.InsertType][tf.ActType][tf.tempStoreLV] += 1" cond = "tf.galflag == 0"]
;そこから更にPermissionをNoneにする
[eval exp="Permission = 'None'"]
;射精・絶頂が溜まり過ぎた時用のフラグを初期化 位置間違うと指定射精と絶頂が同時に発生した時に1のままになるので気をつけて
[eval exp="tf.ActExtraEXFlag = 0"]
;星計算の為に、一度でも射精を行ったシーンの計算
[dTotalEX]
;再選択を行う
[if exp="tf.ReSelCall == 1"][dActEXkiss][endif]
[jump storage="first.ks" target="&f.button"]
[endmacro]
*EXターゲット系
[macro name="dActEX_Target"]
;---------------------------------------------------------------------------
;二回目以降をスキップできるようにする。ターゲットの場合、この値は必ず1になるはず 習得イベントで一回見てるからね
[eval exp = "tf.EXskip = 1"]
;EX系を一度でも行ったかというフラグ。ちなみにパート系は行ったことに含まれない
;2023年8月9日 セーフティとして追加
[dCurrentVoice]
;指定でレベルアップしちゃう!これ無いと相当まずい
[eval exp="tf.NoLVUP=1" cond="tf.arrMaxedEventAct.find(&f.act,0) >= 0"]
;;半裸脱衣・非挿入と挿入、acttypeの宣言
[eval exp="tf.tempActFlag = f.TargetEXFlag[tf.InsertType][tf.ActType]"]
;---------------------------------------------------------------------------
[if exp="((tf.tempActFlag > 0 || tf.galflag == 1) && f.galkaisou == 0 )|| tf.SexualExplosion==1"]
;二回目以降の実行。ムービー描画マクロ。exvoiceにはループする物voiceとしないvoicenoloopがある
;指定射精の時
[exmovie loop = "false" Reserve="lReserveMovie"]
[exmovie-K loop = "true"]
[layopt layer=message0 page=fore visible=false]
;ギャラリーの時はステータスに加算されない
[if exp="tf.galflag != 1 "][dStatusPlus][endif]
[else]
;-------------------Aトーク前半---------------------------------------------
[STALKSTART]
;セリフを出す。EXはセリフが前後編に分かれているのでstorymacro内にてexmovieを使わなければならない。
[dMainTalk]
;ステータスプラス
[r][if exp="tf.galflag != 1 "][dStatusPlus][endif]
[STALKEND]
[endif]
;------------------------------------------------------------------------------------------------------------------------------------------------
;使用回数計算 f.TargetEXが使用回数 f.TargetEXFlagが一度でも行ったか回想用
;更に、足を使う場合のみacttypeが10プラスされ、targetと配列数が合わなくなるのでそれを防ぐ機構を追加
[if exp="tf.ActType < 10"]
;acttypeが足以外10未満
[eval exp="tf.ActTypeTarget=tf.ActType"]
[else]
;足のターゲットのみこっちが適用される
[eval exp="tf.ActTypeTarget=tf.ActType-10"]
[endif]
[eval exp="f.TargetEX[tf.InsertType][tf.ActTypeTarget]=1"]
[eval exp="f.TargetEXFlag[tf.InsertType][tf.ActTypeTarget]=1"]
[eval exp="sf.TargetEXGallery[tf.InsertType][tf.ActTypeTarget]=1"]
;前まで無かった領域 これいるよね動画がBまでしか出ていない時、これを入れなければCが出てこないはず---------------------------------------------
;その周の射精回数を記録する配列に現在のEX回数を記録する。ターゲットの場合直接プラス
;この時、前回の物を参照しないと0回のイベントをスキップしてしまうパターンがある!!気づいて良かった
[eval exp = "f.StoreEX[tf.NudeType_Previous][tf.InsertType_Previous][tf.ActType_Previous][tf.tempStoreLV_Previous] += 1" cond = "tf.galflag == 0"]
;累計の射精回数を記録する配列 習得度のバイアスtf.EXPbias、更にボタン表示に使ってる
[eval exp="f.TotalStoreEX[tf.NudeType_Previous][tf.InsertType_Previous][tf.ActType_Previous][tf.tempStoreLV_Previous] += 1" cond = "tf.galflag == 0"]
;---------------------------------------------
;なんてこった 信じがたいがドラッグ系のみ、ボタンマクロのOnleave制御なのでSetLVでPermissionがNoneになってもドラッグを話した瞬間にPreDragになる
;なのでそこから更にPermissionをNoneにする
[eval exp="Permission = 'None'"]
;星計算の為に、一度でも射精を行ったシーンの計算
[dTotalEX]
[jump storage="first.ks" target="&f.button"]
[endmacro]
*EXパート系
[macro name="dActEX_Part"]
;---------------------------------------------------------------------------
;二回目以降をスキップできるようにする。まだ見ていない場合、この値はになる。また、parameter.ksのデバッグで常にスキップ可能になる変数も作成済
[eval exp = "tf.EXskip = tf.tempTotalStoreEX"]
;---------------------------------------------------------------------------
;Part系を表示する。胸LVなどがPart系 最後にメッセージが表示されるちょっと特殊な物で、各TOTALでif制御される
;パート動画を表示する。
[exmovie opt="_Part" loop = "false"]
[layopt layer=message0 page=fore visible=false]
;実行回数+1 実はストアEXで代用できるのだが、どうせsf.EXF1WQ1も使う為表記を統一
[eval exp = "tf.tempStoreEX += 1" cond = "tf.galflag == 0"]
[layopt layer=message0 page=fore visible=false]
;ギャラリーの時はステータスに加算されない
[if exp="tf.galflag != 1 "][dStatusPlus][endif]
;その周の射精回数を記録する配列に現在のEX回数を記録する。
[eval exp = "f.StoreEX[tf.NudeType][tf.InsertType][tf.ActType][tf.tempStoreLV] = tf.tempStoreEX" cond = "tf.galflag == 0"]
;累計の射精回数を記録する配列 習得度のバイアスtf.EXPbias、更にボタン表示に使ってる
[eval exp="f.TotalStoreEX[tf.NudeType][tf.InsertType][tf.ActType][tf.tempStoreLV] += 1" cond = "tf.galflag == 0"]
;ギャラリー登録 性器観察5が入らなかった事があった為 2024年3月10日
[dSetStoreExGallery]
;なんてこった 信じがたいがドラッグ系のみ、ボタンマクロのOnleave制御なのでSetLVでPermissionがNoneになってもドラッグを話した瞬間にPreDragになる
;なのでそこから更にPermissionをNoneにする
[eval exp="Permission = 'None'"]
;射精・絶頂が溜まり過ぎた時用のフラグを初期化 位置間違うと指定射精と絶頂が同時に発生した時に1のままになるので気をつけて
[eval exp="tf.ActExtraEXFlag = 0"]
;星計算の為に、一度でも射精を行ったシーンの計算
[dTotalEX]
;再選択。
[dActEXkiss]
;あるけどdActEXで飛んでるので基本的には飛ばない
[jump storage="first.ks" target="&f.button"]
[endmacro]
*EX再選択
[macro name="dActEXkiss"]
;HPの暗転時にReSElecetされないのを防ぐ…んだけど再現性がないから本当に防げているのか…たぶん防げているが…
[setHP value = 0.1]
;再選択。同一の行為を選択する。キス・性器観察・胸のLVなどに使用される
;性器観察のみの再選択用。再選択された時に呼吸シーンだとなんか違和感あるというすごい地味な部分を治す物
;観察系を取得する時に、このcountはとても有用だ
[if exp="tf.arrMclick.find(&f.act,0) >= 0"]
;レベル表示だけ先に読み込ませる
[freeimage layer=2 page=fore]
[レイヤ2レベル表示]
[ショートカット誘導]
;NEMURI 正直少し怖い 以前は無かったレイヤ2表示
[layopt layer=2 page=fore visible=true]
;ウェイトの分だけレイヤを非表示
[layopt layer=message1 page=fore visible=false]
;レイヤ3も非表示
[layopt layer=3 page=fore visible=false]
[dSetParam]
[wv canskip = true]
[endif]
;---------------------------------------------------------------------------
;キス・性器観察はレベルアップ時にキス・性器観察の再選択を行う。
[eval exp="f.act=tf.WQwmv[tf.NudeType][tf.InsertType][tf.ActType][ f.StoreLV[tf.NudeType][tf.InsertType][tf.ActType] ]"]
;再選択用。再選択の時回想が流れてしまうのを阻止する。インクリのみにかかり、インクリで元に戻している
[eval exp="tf.Reselect = 1"]
[if exp="tf.ActType==1"]
[eval exp="f.camflag='2'"]
[elsif exp="tf.ActType==0"]
[eval exp="f.camflag='1'"]
[elsif exp="f.act == 'M2WQ1'"]
[eval exp="f.camflag='5'"]
[endif]
;Mクリック用のクリック数を初期化
[eval exp= " tf.clicknum = 0"]
[jump storage="first.ks" target="*ムービー準備領域"]
[endmacro]
[return]