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

1595 lines
No EOL
55 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.

[iscript]
//変数制御
var TimerSpeed = 200;//タイマーを設定する設定ミリ秒に一度発動。なぜ変数かというと、これを使いまわしたEXP係数などにも反映させる為
var TimerEffect = (TimerSpeed / 1000);//タイマーによってかかる係数を今計算しちゃう 後だとなんかわかんなくなりそう
//ブーストの導入時に使用された。スライダーのドラッグを検出する
var lSliderDragged;
var lTester = 0;//思う存分値を変えるために作ったどうでもいい変数だよ
var lFocused = 0;//ウィンドウのフォーカスをチェックする
var lArrMclickExp = [];//Mクリ用の配列
var lExchangeActName;
var lExchangeActCam;
var BMF;
var arrSkn=[];
//ダメージドの境界
var DamageBorder = 60;
var TargetBorder = 85;
//あまり無い機会かもしれないがティックが会話前に滑る…かもしれない。それを一応消しておく
var TickStop = 0;
//HP0時に使用される
var BlackOutOpacity = 0;
var PinkOutOpacity = 0;
//クリッカブル領域マップの数を数える為に改造した
var lClickableNum=0;
//射精等のゲージマックス
var EjacGaugeMAX=0;
var OrgaGaugeMAX=0;
var Permission;
var EX_Flag = false;
var krkrWidth = 1280;
var krkrHeight = 720;
//EXを行ったかどうか
var DoneEX=[];
//1280サイズ用。1280から960を引いた値の2分の1
var krkrLeft = 180;
//800から960にしたいので、その比率を入力する。
var krkrConvert = 1.2;
//parameterで使用される
var param_sum = 0;
var lDragging = 0; //ButtonLayer ドラッガブル定義
var lDragging_Time = 0; //ButtonLayer ドラッグ開始時間の定義。ドラッグ時間を取得する為の仕掛け
var lDrag_Permission = 0;//Buttonmacro(吉里吉里) ドラッガブルにセーフティをかける。バグ対策にもなる
var lDrag_OriginX; //ButtonLayer ドラッガブル定義
var lDrag_OriginY; //ButtonLayer ドラッガブル定義
//var cflg = 0; //いらないと思う
//クリッカブルの複数箇所をクリック可能にするための配列
var Clickable = [];
var ClickIndex;
var lClicked = 0; //クリッカブルのボタンを押した判定。1の時押したとなる
var lDragged = 0; //ドラッガブルのボタンを押した判定。1の時押したとなる。クリッカブルとまとめて良い気も…
//ダメージ時にボイスが著しく変化するシーンの為のフラグ Change系の関数で使用する
var lDamageVoiceChange=0;
var AnotherB;
var GameSpeedMax=1.0;
//Numberキーダウン用
var lNumKeyCount = 0;
//buttonlayerで、OnMouseに、マウスが押された時用のlDrag_Checkを入れる事でボタン上でマウスを押しっぱなしにした時にlDrag_Checkがになるようにした
var skey = 0;
var Lay1vis = true;
var Lay2vis = true;
var Lay3vis = true;
var Lay4vis = true;
//ティック数を数える
var TickChecker = 0;
var lDayTick = 0;
var lPlayVoice = 'talk';
var lCurrentVoice = '';
//予約
var lReserveVoice ='';
var lReserveVoiceDamaged = '';
var lReserveMovie='';
//WHileを区別する
var isWhile=0;
//ゲームスピードのチート使用時
var isGameSpeedCheat=0;
//var lVisWindow = false;//ウィンドウ表示中、trueになる
//スライダーをマウスホイールで+=させるよ。ひょっとしてマウスによっては誤作動するのか?わたしのマウスだと平気だが…
//マウスが壊れている人もいるだろう。オンオフは付けるべきだ
var onMouseWheel_org = kag.onMouseWheel;
kag.onMouseWheel = function (shift, delta, x, y)
{
//受付状態のみマウスホイールを許可する
//カレントシーンがSEXの時のみホイールを許可する
//SXキーボード操作が出来ない時、マウスホイールもまた使用できなくする。これないとトーク中にホイール動かした時まさかのフリーズになる
if (kag.inStable == true && lFocused==1 && tf.currentscene == 'SEX' && tf.SXstop == 0 && (System.getTickCount() - tf.startTime) >= 300){
if (sf.MouseWheelEnable == 1){
//ボタン移動時に即ホイールを押すと割り込みでバグるのを防御 ドラッグ系押した瞬間に割り込みでもバグる!!
if ( (System.getTickCount() - tf.startTime) >= 1000){
//deltaが正の時、ホイールが上方向。
if (delta > 0 ){
if(tf.galflag==0){
//-0.1になる。MAX値だと、マウスホイールのときのみ限界の値を超えてしまうため。
if (sf.GameSpeed <= (GameSpeedMax+f.GameSpeedPlus-0.1) ){
sf.GameSpeed += 0.1;
//最大値付近でホイール回した場合必ず1.0になる。
if(sf.GameSpeed > (GameSpeedMax+f.GameSpeedPlus-0.1) ){
sf.GameSpeed = GameSpeedMax+f.GameSpeedPlus;
}
}
}
else{
//-0.1になる。MAX値だと、マウスホイールのときのみ限界の値を超えてしまうため。
if (sf.GameSpeed <= (GameSpeedMax-0.1) ){
sf.GameSpeed += 0.1;
//最大値付近でホイール回した場合必ず1.0になる。
if(sf.GameSpeed > (GameSpeedMax-0.1) ){
sf.GameSpeed = GameSpeedMax;
}
}
}
}
else if(delta <= 0 ){
if (sf.GameSpeed >= 0.2 ){
sf.GameSpeed -= 0.1;
//0.2未満でホイール下げた場合必ず1.0
if (sf.GameSpeed < 0.2 ){
sf.GameSpeed = 0.1;
}
}
}
//スライダのリフレッシュ。位置はここで良いみたいだ
kageval("[dSetSlider]");
}
//なんか必要みたいなので
onMouseWheel_org(...);
}
}
} incontextof kag;
function SKeyDownHookBack(key, shift)
{
if(kag.inStable == true && tf.SXstop == 0)
{
if(key == #'S' || key == VK_UP || key == VK_LEFT)
{
if(tf.SXstop == 0)
{
//http://kasekey.blog101.fc2.com/blog-entry-220.htmlを参照した。すごい助かる
if (System.getKeyState(VK_S, false) || System.getKeyState(VK_UP, false) || System.getKeyState(VK_LEFT, false))
{
//ここは最初必ず無視される。リンク0にフォーカスさせるため
if(keyfirst == 1)
{
keycount = keycount - 1;
}
//ここは、絶対に最初しか行われない。
else if(keyfirst < 1)
{
keyfirst = keyfirst +1;
}
//メインの処理。キーカウントが、0になったときキーナム引く1(リンクは0から始まるので引く1しないとだめ)
else if(keycount < 0)
{
keycount = keynum-1;
}
}
kag.current.setFocusToLink(keycount,true);
return true;
}
}
}
}
function ADKeyDownHook(key, shift)
{
if (kag.inStable == true && tf.currentscene == 'SEX' && tf.SXstop == 0 && (System.getTickCount() - tf.startTime) >= 300){
//ボタン移動時に即ホイールを押すと割り込みでバグるのを防御 ドラッグ系押した瞬間に割り込みでもバグる!!
if ( (System.getTickCount() - tf.startTime) >= 1000){
if (key == VK_D){
if(!(shift & ssCtrl)){
//通常。Ctrl押してない時マークついてる
//-0.1になる。MAX値だと、マウスホイールのときのみ限界の値を超えてしまうため。
if (sf.GameSpeed <= (GameSpeedMax+f.GameSpeedPlus-0.1) ){
sf.GameSpeed += 0.1;
//最大値付近でホイール回した場合必ず1.0になる。
if(sf.GameSpeed > (GameSpeedMax+f.GameSpeedPlus-0.1) ){
sf.GameSpeed = GameSpeedMax+f.GameSpeedPlus;
}
}
}
else{
sf.GameSpeed=sf.StoreGameSpeed;
}
kageval("[dSetSlider]");
}
else if(key == VK_A){
if(!(shift & ssCtrl)){
//通常。Ctrl押してない時マークついてる
if (sf.GameSpeed >= 0.2 ){
sf.GameSpeed -= 0.1;
//0.2未満でホイール下げた場合必ず1.0
if (sf.GameSpeed < 0.2 ){
sf.GameSpeed = 0.1;
}
}
}
else{
if(sf.GameSpeed>=0.1){
sf.StoreGameSpeed=sf.GameSpeed;
}
sf.GameSpeed = 0;
}
//スライダのリフレッシュ。位置はここで良いみたいだ
kageval("[dSetSlider]");
}
}
}
}
function XKeyDownHook(key, shift)
{
if(kag.inStable == true && tf.SXstop == 0)
{
if(key == #'X' || key == VK_DOWN || key == VK_RIGHT)
{
if(tf.SXstop == 0)
{
//http://kasekey.blog101.fc2.com/blog-entry-220.htmlを参照した。すごい助かる
if (System.getKeyState(VK_X, false) || System.getKeyState(VK_DOWN, false)|| System.getKeyState(VK_RIGHT, false))
{
//ここは最初必ず無視される。リンク0にフォーカスさせるため
if(keyfirst == 1)
{
keycount = keycount + 1;
}
//ここは、絶対に最初しか行われない。
else if(keyfirst < 1)
{
keyfirst = keyfirst +1;
}
//メインの処理。キーカウントが、キーナム以上になった時(リンクは0から始まるので引く1しないとだめ)
else if(keycount > keynum-1)
{
keycount = 0;
}
}
kag.current.setFocusToLink(keycount,true);
return true;
}
}
}
}
function RKeyDownHook(key, shift)
{
//履歴を手動でつくる事にした
if(key == #'R')
{
//履歴出てたら解除、消えてたら出す…のだがlTesterで調べても履歴出てるとキーボードを受け付けなくなる 元の履歴システムがそうなってるっぽいんだよね…
if(kag.historyEnabled==true)
{
if(kag.historyShowing==false)
{
//履歴表示
kag.showHistory();
}
else{
kag.hideHistory();
}
}
}
}
function CheatKeyDownHook(key, shift)
{
//デバッグに使われる。常に発動するので完全なる隠しコマンド
if(key == #'U' && (shift & ssShift) && (shift & ssCtrl) )
{
if(tf.AllGameSpeed<=4)
{
if(GameSpeedMax<=8.5)
{
//tf.AllGameSpeed+=0.5;
sf.GameSpeed += 0.5;
GameSpeedMax += 0.5;
tf.StoreGameSpeed += 0.5;
isGameSpeedCheat=1;
}
}
}
else if(key == #'S' && (shift & ssShift) && (shift & ssCtrl) )
{
//utl_GameSpeedで常に判定するように引っ越し危ないのでめっちゃセーフティ多い
if(lCanWarp==1)
{
lCanWarp=0;
if(kag.conductor.callStackDepth>=1){
kageval("[dStoryExit]");
}
}
}
}
function SKeyDownHook(key, shift)
{
//ムービーのキャンセルを行う隠しコマンド
if(key == #'S' && (shift & ssCtrl) && !(kag.movies[0].storage.indexOf('_Pre') >= 0 && shift & ssShift))
{
//ムービー発動と同時にタイミング良くキャンセルするとフリーズする事があったので回避させる
if(kag.movies[0].frame >= 10)
{
//ループじゃない時で、更にムービープレイ中のみ発動される
if(kag.movies[0].loop == false && kag.movies[0].lastStatus == 'play')
{
//ムービーキャンセラ
kag.se[2].stop();
kag.movies[0].stop();
}
}
}
}
function CTRLKeyDownHook(key, shift)
{
//スキップ中にムービーキャンセル機構
if(key == VK_CONTROL && kag.getCurrentRead() && ( (tf.currentscene=='STORY'|| tf.currentscene=='GALLERY') || (tf.currentscene=='SEX' && f.act.substring(0,3)=='EXV')))
{
//ムービー発動と同時にタイミング良くキャンセルするとフリーズする事があったので回避させる
if(kag.movies[0].frame >= 20)
{
//ループじゃない時で、更にムービープレイ中のみ発動される
if(kag.movies[0].loop == false && kag.movies[0].lastStatus == 'play')
{
//ムービーキャンセラ
kag.se[2].stop();
kag.movies[0].stop();
}
}
}
}
function ZKeyDownHook(key, shift)
{
//ちなみにこの関数って、メインウインドウと両方必要だからね
if(kag.inStable == true && tf.SXstop ==0)
{
if(key == #'Z' || key == VK_RETURN)
{
//間違いなくキーダウンフックが先になっている。ちなみに、検証の結果これは必要だ
kag.current.setFocusToLink(keycount,true); //前つかってたやつ。これが無いと選択後にカーソル消える
}
}
}
function QKeyDownHook(key, shift)
{
if(kag.inStable == true)
{
if(key == #'Q')
{
//Qキーでヘルプ消す為というすごい地味な仕様のためだけに存在する
//kag.current.setFocusToLink(0,true); //
kag.current.processLink(0);
}
}
}
function VKeyDownHook(key, shift)
{
//ちなみにこの関数って、メインウインドウと両方必要だからね
if(key == #'V')
{
//フォーカスさせる必要があるんだ・・・たぶん初歩的な事なんだろうけど、気付かなかった事なので気をつけて。
//ちなみにMessageLayer.tjsでも設定する必要がある。
//kag.primaryLayer.setCursorPos(rposx(360), rposy(260));
//kag.keyDownHook.remove(VKeyDownHook);
//キーボードでクリックした時にエフェクト出るのが嫌なのでそれを防ぐ。
tf.KeyBoardClick = 1;
//if(tf.repeat == "1")
if(tf.repeat == "1" || tf.arrMclick.find(&f.act,0)>=0)
{
//2023年11月6日観察系で連続クリックさせたいので上記の表記に変更
//2020/12/25 おそらく大丈夫だろうがバグに気をつけて。クリッカブルのyubiマクロでcanskipさせるために設定している。
kag.onPrimaryClick();
}
//クリッカブルの時
if(tf.spanking == "1" && Permission == "Click" && tf.arrMclick.find(&f.act,0) == -1){
//ギャラリーでトークをonにした時に、延々とトークがでるのを防ぐ
f.galkaisou = 0;
//クリッカブルボタン押した判定
lClicked = 1;
//buttonmacroで設定した特定のラベルにジャンプさせる
kag.process((&f.act.substring(0, 1))+'TOTAL.ks', '*'+&f.act);
//レイヤ2キーボード誘導削除
kag.tagHandlers.layopt(%[layer:"2", page:'fore', visible:false]);
tf.repeat = 1;
}
else if(tf.spanking == "1" && Permission == "Click" && tf.arrMclick.find(&f.act,0) >= 0){
//ギャラリーでトークをonにした時に、延々とトークがでるのを防ぐ
f.galkaisou = 0;
//観察系の時のみ
lClicked = intrandom(0,lClickableNum-1);
//buttonmacroで設定した特定のラベルにジャンプさせる
kag.process((&f.act.substring(0, 1))+'TOTAL.ks', '*'+&f.act);
//レイヤ2キーボード誘導削除
kag.tagHandlers.layopt(%[layer:"2", page:'fore', visible:false]);
//GraphicLayer.tjsにて設定してる。すっごい複雑なので気をつけて 気をつけようがない
Scripts.eval(lArrMclickExp[lClicked]);
tf.repeat = 1;
}
else if( Permission == "Drag" || (Permission == "PreDrag" && tf.arrDrag.find(&f.act,0) >= 0 ) ){
//
if(EX_Flag == false && tf.SXstop == 0 && System.getKeyState(VK_V) == 1)//NEMURI 吉里吉里側でドラッガブル許可が出ている時
{
//Vキーは強制的にドラッがブルを発動させるので、Permissionも強制的にDragにする。まてよマウス動かす必要ある
Permission = "Drag";
//kag.primaryLayer.cursorX=(tf.lDrag_X + 50);
//kag.primaryLayer.cursorY=(tf.lDrag_Y + 50);
}
else{
Permission = "PreDrag";
}
}
}
}
function SPACEKeyDownHook(key, shift)
{
// スペースキーが押されたとき
if(key == VK_SPACE)
{
//マウス中クリックを許可する。
if(f.middleclick== 1)
{
//Afterinitに記述して出来るかためしているので、今下の一行けしてる 消したままでよさそうだ hideallcameraは、オールカメラでメッセ消した時に、消した状態を持続するもの。SHORTCUT
if(kag.historyLayer.visible){
kag.hideHistory();
}
else if(kag.messageLayerHiding){
kag.showMessageLayerByUser() , tf.hideallcamera = 0;
}
else{
kag.hideMessageLayerByUser() , tf.hideallcamera = 1 ;
}
}
}
}
function ESCAPEkeyDownHook(key, shift)
{
// 『ESC』キーが押されたとき
if(key == VK_ESCAPE && lExitDialogVisibled==0 && lVisWindow==0)
{
kag.close();
}
}
// キーフックに登録
kag.keyDownHook.add(ESCAPEkeyDownHook);
/******************************************
NEMURI 特定のキーを押したときに指定のラベルにジャンプさせる てかこれまとめられるよね?
極端な話、buttunmacroからcond条件を全部コピーするだけで成立はするな
キーカウントを0にすればいいんだ
を押した時には、キーカウント0
2を押した時にキーカウント+1
それにZを組み合わせれば上手く行くのでは
まてよ?たしかに全部出ている状態なら上手くいくが、
全部出ていないときは表と裏が同期してないとダメだし、リンク番号がずれてしまう
それまでのjf累積で計算すればいいのでは
当然だ、上から数えた数になるんだから
上から数えた数
そうか、ifでjf累積が できる可能だ
kag.current.keyLinkでマウスオーバー時のリンク番号を調べられる忘れるな
単純な話、押した時にマウス移動でキスの位置に動かしてkag.current.keyLinkで調べた値をセットフォーカスでラベルに飛ぶっていう力技もありだよね
これだと実質マウスクリックと同じなわけだ
①マウスをボタン位置に動かして ②kag.current.keyLinkでリンク番号取得して ③kag.current.processLinkでラベル移動 で完了か 簡単じゃん
******************************************//////////////////
function NUMBERKeyDownHook(key, shift)
{
//まだちゃんとやってないから気をつけて
//SXstopされてない時のみ発動する。
//本来はSキーとXキーの移動を制御しなくするものだったが、会話中のナンバージャンプも無効化している
if((tf.SXstop == 0 || tf.currentscene == 'DIALOG') && (key == #'1' || key == #'2' || key == #'3' || key == #'4' || key == #'5' || key == #'6' || key == #'7' || key == #'8' || key == #'9' || key == #'0' || key == #'C'|| key == #'Q' || key == #'W' || key == #'E' ) && tf.afterinitwait == 0 )
{
lDrag_Permission = 0; //NEMURI ドラッガブル用。セーフティをかけてドラッガブルを禁止する
//なぜjf1でifしているのかというと、これが無いとメニュー画面とかでキー押してもafterinitwaitがになってしまうためHシーンでないとjf1は出ない
if(f.jf1 == 1 && tf.currentscene == 'SEX')
{
tf.afterinitwait = 1;
//ここは、絶対に最初しか行われない。
if(keyfirst < 1)
{
keyfirst = keyfirst +1;
}
}
//skeyはどのボタンを押したか。実は現状、下のプロセスリンク判別以外に意味が無いけど、ショップなどで使える可能性が高い
//番のみ、ダウンのパターンがあるのでf.jfNとjfNDがある
if(key == #'1' && (f.jf1 == 1 || f.jfN == 1 || f.jfND == 1) ){skey = 1; lNumKeyCount = f.jf1 + f.jfN + f.jfND - 1;}
else if(key == #'2' && f.jf2 == 1){skey = 2; lNumKeyCount = f.jf1 + f.jf2 + f.jfN + f.jfND - 1 ;}
else if(key == #'3' && f.jf3 == 1){skey = 3; lNumKeyCount = f.jf1 + f.jf2 + f.jf3 + f.jfN + f.jfND - 1 ;}
else if(key == #'4' && f.jf4 == 1){skey = 4; lNumKeyCount = f.jf1 + f.jf2 + f.jf3 + f.jf4 + f.jfN + f.jfND - 1 ;}
//逆にした 後の数字変えなくていいんだね。よく考えたらlocateで位置だけ変えてjfの数字は変えてないんだから当然か
else if(key == #'5' && f.jf5 == 1){skey = 6; lNumKeyCount = f.jf1 + f.jf2 + f.jf3 + f.jf4 + f.jf5 + f.jfN + f.jfND - 1 ;}
else if(key == #'6' && f.jf6 == 1){skey = 5; lNumKeyCount = f.jf1 + f.jf2 + f.jf3 + f.jf4 + f.jf5 + f.jf6 + f.jfN + f.jfND - 1 ;}
else if(key == #'7' && f.jf7 == 1){skey = 7; lNumKeyCount = f.jf1 + f.jf2 + f.jf3 + f.jf4 + f.jf5 + f.jf6 + f.jf7 + f.jfN + f.jfND - 1 ;}
//直接回復に飛ばす機構にした
else if(key == #'8' && f.jfQ == 1){kag.process('first.ks', '*dActHealMessage');}
//脱衣。これも直接飛ばすべき?ただ回復と違ってキーナムが変わらないからそこまで神経質になる事もないのでは
else if(key == #'9' && f.jfNude == 1){skey = 9; lNumKeyCount = f.jf1 + f.jf2 + f.jf3 + f.jf4 + f.jf5 + f.jf6 + f.jf7 + f.jfQ + f.jfNude + f.jfN + f.jfND - 1 ;}
//処女喪失専用。もしかしたら他のに使う可能性もあるけど
else if(key == #'0' && f.jfV == 1 && f.virgin == 1){skey = 10; lNumKeyCount = f.jf1 + f.jf2 + f.jf3 + f.jf4 + f.jf5 + f.jf6 + f.jf7 + f.jfQ + f.jfV + f.jfNude + f.jfN + f.jfND - 1 ;}
//右クリエミュレート
else if(key == #'C'){kag.onPrimaryRightClick();}
//ギャラリー 使っていないが、念のため残した
//else if(key == #'4' && f.jfg1 == 1 && f.galflag == 1 && tf.currentscene == 'SEX'){skey = 1; lNumKeyCount = f.jfg1;}
//else if(key == #'5' && f.jfg2 == 1 && f.galflag == 1 && tf.currentscene == 'SEX'){skey = 1; lNumKeyCount = f.jfg1 + f.jfg2 ;}
//else if(key == #'1' && f.galflag == 1 && tf.currentscene == 'SEX'){skey = 1; lNumKeyCount = f.jfg1 + f.jfg2 +4;}
//else if(key == #'2' && f.galflag == 1 && tf.currentscene == 'SEX'){skey = 1; lNumKeyCount = f.jfg1 + f.jfg2 +5;}
//else if(key == #'3' && f.galflag == 1 && tf.currentscene == 'SEX'){skey = 1; lNumKeyCount = f.jfg1 + f.jfg2 +6;}
//EXITダイアログ
else if(key == #'1' && tf.currentscene == 'DIALOG'){skey = 1; lNumKeyCount = 0;}
else if(key == #'2' && tf.currentscene == 'DIALOG'){skey = 1; lNumKeyCount = 1;}
//ここからEXITやTALK 常に表示されている為、を押した時のパターンに等足すだけでいい。
else if(key == #'Q' && tf.currentscene == 'SEX' ){skey = 1; lNumKeyCount = f.jf1 + f.jf2 + f.jf3 + f.jf4 + f.jf5 + f.jf6 + f.jf7 + f.jfQ + f.jfV + f.jfNude + f.jfN + f.jfND + f.jfR + tf.jfH - 1;}
else if(key == #'E' && tf.currentscene == 'SEX' ){skey = 1; lNumKeyCount = f.jf1 + f.jf2 + f.jf3 + f.jf4 + f.jf5 + f.jf6 + f.jf7 + f.jfQ + f.jfV + f.jfNude + f.jfN + f.jfND + f.jfR + tf.jfH + tf.jfExit - 1;}
else if(key == #'W' && tf.currentscene == 'SEX' ){skey = 1; lNumKeyCount = f.jf1 + f.jf2 + f.jf3 + f.jf4 + f.jf5 + f.jf6 + f.jf7 + f.jfQ + f.jfV + f.jfNude + f.jfN + f.jfND + f.jfR + tf.jfH + tf.jfExit + tf.jfT - 1 ;}
//何も押されなかった場合なのだが、押されなかった時アフターイニットが1になるのでにもどす
else{
skey = 0;
tf.afterinitwait = 0;
}
if(skey != 0)
{
kag.onPrimaryClickByKey();
skey = 0;
kag.current.setFocusToLink(lNumKeyCount,true);
kag.current.processLink(lNumKeyCount);//キーカウントの番号にリンクしてボタンを押す。
}
else
{
skey = 0;
}
}
}
//KeyDownHookをkagに登録
kag.keyDownHook.add(NUMBERKeyDownHook);
//ムービーがあるか検出する。
function isExistMovieStorage(storage)
{
if (Storages.isExistentStorage(storage) ||
Storages.isExistentStorage(storage + '.wmv'))
return 1;
return 0;
}
function isExistImageStorage(storage)
{
if (Storages.isExistentStorage(storage) ||
Storages.isExistentStorage(storage + '.png') ||
Storages.isExistentStorage(storage + '.jpg') ||
Storages.isExistentStorage(storage + '.bmp'))
return 1;
return 0;
}
// 1024x768サイズ
function onBigSize // incontextof win
{
//dm('onNormalSizeMenuItemClick()');
if (fullScreened)
onWindowedMenuItemClick(...);
if (maximized)
showRestore();
setInnerSize(1024, 0, true);
sf.WindowResizable.fullScreen = fullScreen;
}
// ジャンプを、ジャンプ先が無い場合に指定したファイルに飛ばす
function djump(lScenario,lLabel)
{
try {
kag.process("STOTAL.ks", "*S1WQ1");
}
catch (e) {
kag.process("STOTAL.ks", "*S1WQ1");
}
//return true;
}
function MultiClickCameraMath(x) {
if (x === 3) {
return 0;
} else {
return x;
}
}
//配列内で与えられた変数の最大値を返す
function getMax(numbers) {
var max = numbers[0];
for(var i = 0; i < numbers.length; i++) {
if(numbers[i] > max) {
max = numbers[i];
}
}
return max;
}
//配列内で与えられた変数の最大だったインデックスを返す
function getMaxEXPIndex(numbers) {
var MaxAction = 0;
for(var i = 0; i < numbers.length; i++) {
if(numbers[i] > numbers[MaxAction]) {
MaxAction = i;
}
}
// 配列のインデックスは0から始まるので、1を足す
return MaxAction + 1;
}
//配列内で与えられた変数の最大だったインデックスを返す
function dNextPer(Total,Next) {
var Mathed = 0;
Mathed = Total/Next;
if(Mathed >= 1) {
Mathed = 1;
}
// 配列のインデックスは0から始まるので、1を足す
return Mathed;
}
function dBlackOut() {
//HP0時にブラックアウトさせる
if(f.HP <= 0 && tf.currentscene == 'SEX'){
if(BlackOutOpacity == 0) {
kag.fore.layers[6].loadImages(%[ storage:"エフェクト_black.png"]);
kag.fore.layers[6].visible = true;
kag.fore.layers[6].left = krkrLeft;
kag.fore.layers[6].absolute=7000;
kag.fore.layers[6].opacity=BlackOutOpacity;
//レイヤ9も
kag.fore.layers[9].visible = false;
}
else if(BlackOutOpacity <= 200) {
kag.fore.layers[6].opacity=BlackOutOpacity;
}
//200以上になっても際限なく増えるけど別に増やして大丈夫 プログラム的にはopacityは200までしか増えないよ
BlackOutOpacity += 5;
}
else{
BlackOutOpacity = 0;
//kag.fore.layers[6].visible = false;
}
}
function dJump(fact)
{
try {
kag.process( (fact[0] + 'TOTAL.ks'),('*' + fact) );
}
catch (e) {
//ムービー準備領域でf.actがEXにだけなった事があるその対策
kag.process( ('MTOTAL.ks'),('*M1WQ1') );
}
}
function SkipMovie_Check(lVid) {
//見つからなかった時
if (sf.SkipMovie.find(lVid,0) < 0) {
//配列にlVidを追加する
sf.SkipMovie.add(lVid);
return false;
}
//見つかったのでtrueで返す
else{
return true;
}
}
function SkipPoint_Check(lVid) {
//見つからなかった時
if (sf.SkipPoint.find(lVid,0) < 0) {
//配列にlVidを追加する
sf.SkipPoint.add(lVid);
return false;
}
//見つかったのでtrueで返す
else{
return true;
}
}
function DoneEX_Check(fact) {
//見つからなかった時
if (DoneEX.find(fact,0) < 0) {
//配列にf.actを追加する
DoneEX.add(fact);
}
return true;
}
//スキン配列に追加する。
function ArrMarge(lArr,lPoint) {
//見つからなかった時
if ( (lArr.find(lPoint,0) < 0)) {
//配列にf.actを追加する
if(lPoint!=''){
lArr.add(lPoint);
}
}
return true;
}
//スキン配列に追加する。
function SkinCheck(fact) {
//見つからなかった時
if ( (sf.SourceSkinCheck.find(fact,0) < 0 && tf.galflag!=1)) {
//配列にf.actを追加する
sf.SourceSkinCheck.add(fact);
////kageval("[Cutin_Skin]");
//kagevalで最初はやろうと思ったけど、色々不都合がある。割り込み扱いになるようだ。苦肉の作としてこの方法に
tf.GetSkinFlag = 1;
}
return true;
}
//スキン配列に追加する。
function SkinCheck_Remove(fact) {
//スキンの削除とスキンリストの作成を兼ねる
if(sf.SourceSkinCheck.find(fact,0) >= 0 ){
tf.DummySkinCheck.remove(fact);
}
if(tf.CheatSkinList.find(fact,0) >= 0) {
tf.CheatSkinList.remove(fact);
}
}
//スキンのボタン表示を行う
function SkinMarkVisCheck() {
//初期化
f.NewSkinCheck.assignStruct(tf.ArrInit);
//退避配列
var SkinArrays=[];
if(f.SkinAll==0){
SkinArrays.assignStruct(tf.DummySkinCheck);
}
else{
SkinArrays.assignStruct(tf.CheatSkinList);
}
for (var i = 0; i < SkinArrays.length; i++) {
var item = SkinArrays[i];
// ここで取り出したitemを使って何か処理を行う
if (item=='M1WQ1'){f.NewSkinCheck[0][0][0][0]=1;}
else if (item=='M1WQ2'){f.NewSkinCheck[0][0][0][1]=1;}
else if (item=='M1WQ3'){f.NewSkinCheck[0][0][0][2]=1;}
else if (item=='M1WQ4'){f.NewSkinCheck[1][0][0][0]=1;}
else if (item=='M1WQ5'){f.NewSkinCheck[1][0][0][1]=1;}
else if (item=='M1WQ6'){f.NewSkinCheck[1][0][0][2]=1;}
else if (item=='H1WQ1'){f.NewSkinCheck[0][0][1][0]=1;}
else if (item=='H1WQ2'){f.NewSkinCheck[0][0][1][1]=1;}
else if (item=='B2WQ1'){f.NewSkinCheck[0][0][1][2]=1;}
else if (item=='H1WQ3'){f.NewSkinCheck[1][0][1][0]=1;}
else if (item=='H1WQ4'){f.NewSkinCheck[1][0][1][1]=1;}
else if (item=='H1WQ6'){f.NewSkinCheck[1][0][1][2]=1;}
else if (item=='F1WQ1'){f.NewSkinCheck[0][0][2][0]=1;}
else if (item=='F1WQ2'){f.NewSkinCheck[0][0][2][1]=1;}
else if (item=='F1WQ3'){f.NewSkinCheck[0][0][2][2]=1;}
else if (item=='F1WQ4'){f.NewSkinCheck[1][0][2][0]=1;}
else if (item=='F1WQ5'){f.NewSkinCheck[1][0][2][1]=1;}
else if (item=='F1WQ6'){f.NewSkinCheck[1][0][2][2]=1;}
else if (item=='F7WQ1'){f.NewSkinCheck[0][0][12][2]=1;}
else if (item=='M7WQ1'){f.NewSkinCheck[1][0][12][2]=1;}
else if (item=='F2WQ1'){f.NewSkinCheck[0][0][3][0]=1;}
else if (item=='F2WQ2'){f.NewSkinCheck[0][0][3][1]=1;}
else if (item=='F2WQ3'){f.NewSkinCheck[0][0][3][2]=1;}
else if (item=='F2WQ4'){f.NewSkinCheck[1][0][3][0]=1;}
else if (item=='F2WQ5'){f.NewSkinCheck[1][0][3][1]=1;}
else if (item=='F4WQ1'){f.NewSkinCheck[1][0][3][2]=1;}
else if (item=='M5WQ2'){f.NewSkinCheck[0][0][13][0]=1;}
else if (item=='M4WQ5'){f.NewSkinCheck[0][0][13][1]=1;}
else if (item=='M4WQ1'){f.NewSkinCheck[0][0][13][2]=1;}
else if (item=='M4WQ3'){f.NewSkinCheck[1][0][13][0]=1;}
else if (item=='M4WQ6'){f.NewSkinCheck[1][0][13][1]=1;}
else if (item=='M4WQ4'){f.NewSkinCheck[1][0][13][2]=1;}
else if (item=='M2WQ1'){f.NewSkinCheck[0][0][4][0]=1;}
else if (item=='M2WQ2'){f.NewSkinCheck[0][0][4][1]=1;}
else if (item=='M2WQ3'){f.NewSkinCheck[0][0][4][2]=1;}
else if (item=='M2WQ5'){f.NewSkinCheck[1][0][4][0]=1;}
else if (item=='M2WQ4'){f.NewSkinCheck[1][0][4][1]=1;}
else if (item=='M2WQ6'){f.NewSkinCheck[1][0][4][2]=1;}
else if (item=='M6WQ1'){f.NewSkinCheck[0][0][14][0]=1;}
else if (item=='M3WQ3'){f.NewSkinCheck[0][0][14][1]=1;}
else if (item=='M3WQ4'){f.NewSkinCheck[0][0][14][2]=1;}
else if (item=='M3WQ2'){f.NewSkinCheck[1][0][14][0]=1;}
else if (item=='M3WQ7'){f.NewSkinCheck[1][0][14][1]=1;}
else if (item=='M3WQ6'){f.NewSkinCheck[1][0][14][2]=1;}
else if (item=='O1WQ1'){f.NewSkinCheck[0][0][5][0]=1;}
else if (item=='O1WQ2'){f.NewSkinCheck[0][0][5][1]=1;}
else if (item=='O1WQ3'){f.NewSkinCheck[0][0][5][2]=1;}
else if (item=='O1WQ4'){f.NewSkinCheck[1][0][5][0]=1;}
else if (item=='O1WQ5'){f.NewSkinCheck[1][0][5][1]=1;}
else if (item=='O4WQ2'){f.NewSkinCheck[1][0][5][2]=1;}
else if (item=='F6WQ1'){f.NewSkinCheck[0][0][15][0]=1;}
else if (item=='F6WQ2'){f.NewSkinCheck[0][0][15][1]=1;}
else if (item=='F6WQ3'){f.NewSkinCheck[0][0][15][2]=1;}
else if (item=='F6WQ4'){f.NewSkinCheck[1][0][15][0]=1;}
else if (item=='F6WQ5'){f.NewSkinCheck[1][0][15][1]=1;}
else if (item=='F6WQ6'){f.NewSkinCheck[1][0][15][2]=1;}
else if (item=='D1WQ2'){f.NewSkinCheck[0][0][6][0]=1;}
else if (item=='D1WQ1'){f.NewSkinCheck[0][0][6][1]=1;}
else if (item=='D3WQ1'){f.NewSkinCheck[0][0][6][2]=1;}
else if (item=='D1WQ3'){f.NewSkinCheck[1][0][6][0]=1;}
else if (item=='D1WQ4'){f.NewSkinCheck[1][0][6][1]=1;}
else if (item=='D2WQ2'){f.NewSkinCheck[1][0][6][2]=1;}
else if (item=='D7WQ1'){f.NewSkinCheck[0][0][16][2]=1;}
else if (item=='D7WQ2'){f.NewSkinCheck[1][0][16][2]=1;}
else if (item=='S1WQ1'){f.NewSkinCheck[0][1][0][0]=1;}
else if (item=='S1WQ2'){f.NewSkinCheck[0][1][0][1]=1;}
else if (item=='S1WQ3'){f.NewSkinCheck[0][1][0][2]=1;}
else if (item=='S1WQ4'){f.NewSkinCheck[1][1][0][0]=1;}
else if (item=='S1WQ5'){f.NewSkinCheck[1][1][0][1]=1;}
else if (item=='S3WQ6'){f.NewSkinCheck[1][1][0][2]=1;}
else if (item=='S4WQ1'){f.NewSkinCheck[0][1][1][0]=1;}
else if (item=='S3WQ5'){f.NewSkinCheck[0][1][1][1]=1;}
else if (item=='S3WQ2'){f.NewSkinCheck[0][1][1][2]=1;}
else if (item=='S3WQ3'){f.NewSkinCheck[1][1][1][0]=1;}
else if (item=='S3WQ1'){f.NewSkinCheck[1][1][1][1]=1;}
else if (item=='S3WQ4'){f.NewSkinCheck[1][1][1][2]=1;}
else if (item=='K1WQ1'){f.NewSkinCheck[0][1][2][0]=1;}
else if (item=='K1WQ2'){f.NewSkinCheck[0][1][2][1]=1;}
else if (item=='K1WQ3'){f.NewSkinCheck[0][1][2][2]=1;}
else if (item=='K1WQ4'){f.NewSkinCheck[1][1][2][0]=1;}
else if (item=='K1WQ5'){f.NewSkinCheck[1][1][2][1]=1;}
else if (item=='K1WQ8'){f.NewSkinCheck[1][1][2][2]=1;}
else if (item=='K7WQ1'){f.NewSkinCheck[0][1][12][2]=1;}
else if (item=='K7WQ4'){f.NewSkinCheck[1][1][12][2]=1;}
else if (item=='B1WQ1'){f.NewSkinCheck[0][1][3][0]=1;}
else if (item=='B1WQ2'){f.NewSkinCheck[0][1][3][1]=1;}
else if (item=='B1WQ3'){f.NewSkinCheck[0][1][3][2]=1;}
else if (item=='B1WQ4'){f.NewSkinCheck[1][1][3][0]=1;}
else if (item=='B3WQ5'){f.NewSkinCheck[1][1][3][1]=1;}
else if (item=='B1WQ6'){f.NewSkinCheck[1][1][3][2]=1;}
else if (item=='B7WQ1'){f.NewSkinCheck[0][1][13][2]=1;}
else if (item=='B7WQ4'){f.NewSkinCheck[1][1][13][2]=1;}
else if (item=='B3WQ1'){f.NewSkinCheck[0][1][4][0]=1;}
else if (item=='B3WQ2'){f.NewSkinCheck[0][1][4][1]=1;}
else if (item=='B3WQ3'){f.NewSkinCheck[0][1][4][2]=1;}
else if (item=='B2WQ2'){f.NewSkinCheck[1][1][4][0]=1;}
else if (item=='B1WQ5'){f.NewSkinCheck[1][1][4][1]=1;}
else if (item=='B3WQ6'){f.NewSkinCheck[1][1][4][2]=1;}
else if (item=='K2WQ2'){f.NewSkinCheck[0][1][14][0]=1;}
else if (item=='K3WQ1'){f.NewSkinCheck[0][1][14][1]=1;}
else if (item=='K6WQ1'){f.NewSkinCheck[0][1][14][2]=1;}
else if (item=='K3WQ2'){f.NewSkinCheck[1][1][14][0]=1;}
else if (item=='K5WQ1'){f.NewSkinCheck[1][1][14][1]=1;}
else if (item=='K1WQ9'){f.NewSkinCheck[1][1][14][2]=1;}
else if (item=='S6WQ1'){f.NewSkinCheck[0][1][5][0]=1;}
else if (item=='S6WQ2'){f.NewSkinCheck[0][1][5][1]=1;}
else if (item=='S6WQ5'){f.NewSkinCheck[0][1][5][2]=1;}
else if (item=='S6WQ3'){f.NewSkinCheck[1][1][5][0]=1;}
else if (item=='S6WQ4'){f.NewSkinCheck[1][1][5][1]=1;}
else if (item=='S6WQ6'){f.NewSkinCheck[1][1][5][2]=1;}
else if (item=='F1WQ8'){f.NewSkinCheck[0][1][15][2]=1;}
else if (item=='F1WQ7'){f.NewSkinCheck[1][1][15][2]=1;}
else if (item=='B8WQ1'){f.NewSkinCheck[0][1][6][0]=1;}
else if (item=='D8WQ1'){f.NewSkinCheck[0][1][6][1]=1;}
else if (item=='D8WQ9'){f.NewSkinCheck[0][1][6][2]=1;}
else if (item=='B8WQ2'){f.NewSkinCheck[1][1][6][0]=1;}
else if (item=='K8WQ1'){f.NewSkinCheck[1][1][6][1]=1;}
else if (item=='S8WQ1'){f.NewSkinCheck[1][1][6][2]=1;}
else if (item=='D8WQ8'){f.NewSkinCheck[0][1][16][2]=1;}
else if (item=='D8WQ7'){f.NewSkinCheck[1][1][16][2]=1;}
}
}
function dNameExchange(item)
{
//スキンジャンプに使用したネーム変換表
var lArrExchange=[];
// 0 f.camflag='1'; 1 Ant=0; 2 AnotherAct[Ant] = 0; 3 acttype; 4 tf.NudeType=0; 5 tf.Insert; 6 f.StoreLV[tf.NudeType][0][Ant+AnotherAct[Ant]] =0; 7 tf.AbsCam ; 8 ('キスLV1') 9タイトル
//camflag anotheract ヌードタイプ レベル
if (item=='M1WQ1'){lArrExchange=['1', 0, 0,0,0,0,0,'' ,'キスLV1']; return lArrExchange;}
else if (item=='M1WQ2'){lArrExchange=['1', 0, 0,0,0,0,1,'' ,'キスLV2']; return lArrExchange;}
else if (item=='M1WQ3'){lArrExchange=['1', 0, 0,0,0,0,2,'0','キスLV3','乳首搾精/射精']; return lArrExchange;}
else if (item=='M1WQ4'){lArrExchange=['1', 0, 0,0,1,0,0,'' ,'キスLV4']; return lArrExchange;}
else if (item=='M1WQ5'){lArrExchange=['1', 0, 0,0,1,0,1,'' ,'キスLV5']; return lArrExchange;}
else if (item=='M1WQ6'){lArrExchange=['1', 0, 0,0,1,0,2,'' ,'キスLV6']; return lArrExchange;}
else if (item=='H1WQ1'){lArrExchange=['2', 0, 0,1,0,0,0,'' ,'性器観察LV1']; return lArrExchange;}
else if (item=='H1WQ2'){lArrExchange=['2', 0, 0,1,0,0,1,'' ,'性器観察LV2']; return lArrExchange;}
else if (item=='B2WQ1'){lArrExchange=['2', 0, 0,1,0,0,2,'' ,'性器観察LV3']; return lArrExchange;}
else if (item=='H1WQ3'){lArrExchange=['2', 0, 0,1,1,0,0,'' ,'性器観察LV4']; return lArrExchange;}
else if (item=='H1WQ4'){lArrExchange=['2', 0, 0,1,1,0,1,'' ,'性器観察LV5']; return lArrExchange;}
else if (item=='H1WQ6'){lArrExchange=['2', 0, 0,1,1,0,2,'' ,'性器観察LV6']; return lArrExchange;}
else if (item=='F1WQ1'){lArrExchange=['3', 2, 0,2,0,0,0,'' ,'手を使うLV1']; return lArrExchange;}
else if (item=='F1WQ2'){lArrExchange=['3', 2, 0,2,0,0,1,'1','手を使うLV2','手で・野外/射精']; return lArrExchange;}
else if (item=='F1WQ3'){lArrExchange=['3', 2, 0,2,0,0,2,'0','手を使うLV3','口で・四つん這い/射精']; return lArrExchange;}
else if (item=='F1WQ4'){lArrExchange=['3', 2, 0,2,1,0,0,'' ,'手を使うLV4']; return lArrExchange;}
else if (item=='F1WQ5'){lArrExchange=['3', 2, 0,2,1,0,1,'' ,'手を使うLV5']; return lArrExchange;}
else if (item=='F1WQ6'){lArrExchange=['3', 2, 0,2,1,0,2,'' ,'手を使うLV6']; return lArrExchange;}
else if (item=='F7WQ1'){lArrExchange=['3', 2,10,2,0,0,2,'1','秘部責めるLV3','にゃん電気あんま']; return lArrExchange;}
else if (item=='M7WQ1'){lArrExchange=['3', 2,10,2,1,0,2,'' ,'秘部責めるLV6']; return lArrExchange;}
else if (item=='F2WQ1'){lArrExchange=['4', 3, 0,3,0,0,0,'' ,'フェラLV1']; return lArrExchange;}
else if (item=='F2WQ2'){lArrExchange=['4', 3, 0,3,0,0,1,'' ,'フェラLV2']; return lArrExchange;}
else if (item=='F2WQ3'){lArrExchange=['4', 3, 0,3,0,0,2,'1','フェラLV3','咥えて/射精']; return lArrExchange;}
else if (item=='F2WQ4'){lArrExchange=['4', 3, 0,3,1,0,0,'' ,'フェラLV4']; return lArrExchange;}
else if (item=='F2WQ5'){lArrExchange=['4', 3, 0,3,1,0,1,'' ,'フェラLV5']; return lArrExchange;}
else if (item=='F4WQ1'){lArrExchange=['4', 3, 0,3,1,0,2,'' ,'フェラLV6']; return lArrExchange;}
else if (item=='M5WQ2'){lArrExchange=['4', 3,10,3,0,0,0,'' ,'クンニLV1']; return lArrExchange;}
else if (item=='M4WQ5'){lArrExchange=['4', 3,10,3,0,0,1,'' ,'クンニLV2']; return lArrExchange;}
else if (item=='M4WQ1'){lArrExchange=['4', 3,10,3,0,0,2,'2','クンニLV3','クンニ接写']; return lArrExchange;}
else if (item=='M4WQ3'){lArrExchange=['4', 3,10,3,1,0,0,'' ,'クンニLV4']; return lArrExchange;}
else if (item=='M4WQ6'){lArrExchange=['4', 3,10,3,1,0,1,'' ,'クンニLV5']; return lArrExchange;}
else if (item=='M4WQ4'){lArrExchange=['4', 3,10,3,1,0,2,'1','クンニLV6','にゃんクンニ']; return lArrExchange;}
else if (item=='M2WQ1'){lArrExchange=['5', 4, 0,4,0,0,0,'1','胸を使うLV1','おっぱい大']; return lArrExchange;}
else if (item=='M2WQ2'){lArrExchange=['5', 4, 0,4,0,0,1,'1','胸を使うLV2','おっぱい大/射精']; return lArrExchange;}
else if (item=='M2WQ3'){lArrExchange=['5', 4, 0,4,0,0,2,'' ,'胸を使うLV3']; return lArrExchange;}
else if (item=='M2WQ5'){lArrExchange=['5', 4, 0,4,1,0,0,'' ,'胸を使うLV4']; return lArrExchange;}
else if (item=='M2WQ4'){lArrExchange=['5', 4, 0,4,1,0,1,'' ,'胸を使うLV5']; return lArrExchange;}
else if (item=='M2WQ6'){lArrExchange=['5', 4, 0,4,1,0,2,'0','胸を使うLV6','挿入胸責め']; return lArrExchange;}
else if (item=='M6WQ1'){lArrExchange=['5', 4,10,4,0,0,0,'1','愛撫LV1','顔でぷにぷに']; return lArrExchange;}
else if (item=='M3WQ3'){lArrExchange=['5', 4,10,4,0,0,1,'' ,'愛撫LV2']; return lArrExchange;}
else if (item=='M3WQ4'){lArrExchange=['5', 4,10,4,0,0,2,'' ,'愛撫LV3']; return lArrExchange;}
else if (item=='M3WQ2'){lArrExchange=['5', 4,10,4,1,0,0,'' ,'愛撫LV4']; return lArrExchange;}
else if (item=='M3WQ7'){lArrExchange=['5', 4,10,4,1,0,1,'' ,'愛撫LV5']; return lArrExchange;}
else if (item=='M3WQ6'){lArrExchange=['5', 4,10,4,1,0,2,'1','愛撫LV6','搾精/射精']; return lArrExchange;}
else if (item=='O1WQ1'){lArrExchange=['6', 5, 0,5,0,0,0,'1','自慰LV1','眠る隣で1/射精']; return lArrExchange;}
else if (item=='O1WQ2'){lArrExchange=['6', 5, 0,5,0,0,1,'1','自慰LV2','眠る隣で2/射精']; return lArrExchange;}
else if (item=='O1WQ3'){lArrExchange=['6', 5, 0,5,0,0,2,'1','自慰LV3','自慰・強']; return lArrExchange;}
else if (item=='O1WQ4'){lArrExchange=['6', 5, 0,5,1,0,0,'1','自慰LV4','顔にかけて…/射精']; return lArrExchange;}
else if (item=='O1WQ5'){lArrExchange=['6', 5, 0,5,1,0,1,'' ,'自慰LV5']; return lArrExchange;}
else if (item=='O4WQ2'){lArrExchange=['6', 5, 0,5,1,0,2,'1','自慰LV6','自慰フェラ向き変え']; return lArrExchange;}
else if (item=='F6WQ1'){lArrExchange=['6', 5,10,5,0,0,0,'' ,'足を使うLV1']; return lArrExchange;}
else if (item=='F6WQ2'){lArrExchange=['6', 5,10,5,0,0,1,'' ,'足を使うLV2']; return lArrExchange;}
else if (item=='F6WQ3'){lArrExchange=['6', 5,10,5,0,0,2,'2','足を使うLV3','少年カメラ']; return lArrExchange;}
else if (item=='F6WQ4'){lArrExchange=['6', 5,10,5,1,0,0,'' ,'足を使うLV4']; return lArrExchange;}
else if (item=='F6WQ5'){lArrExchange=['6', 5,10,5,1,0,1,'' ,'足を使うLV5']; return lArrExchange;}
else if (item=='F6WQ6'){lArrExchange=['6', 5,10,5,1,0,2,'' ,'足を使うLV6']; return lArrExchange;}
else if (item=='D1WQ2'){lArrExchange=['7', 6, 0,6,0,0,0,'' ,'道具使うLV1']; return lArrExchange;}
else if (item=='D1WQ1'){lArrExchange=['7', 6, 0,6,0,0,1,'' ,'道具使うLV2']; return lArrExchange;}
else if (item=='D3WQ1'){lArrExchange=['7', 6, 0,6,0,0,2,'' ,'道具使うLV3']; return lArrExchange;}
else if (item=='D1WQ3'){lArrExchange=['7', 6, 0,6,1,0,0,'0','道具使うLV4','拘束/射精']; return lArrExchange;}
else if (item=='D1WQ4'){lArrExchange=['7', 6, 0,6,1,0,1,'' ,'道具使うLV5']; return lArrExchange;}
else if (item=='D2WQ2'){lArrExchange=['7', 6, 0,6,1,0,2,'' ,'道具使うLV6']; return lArrExchange;}
else if (item=='D7WQ1'){lArrExchange=['7', 6,10,6,0,0,2,'' ,'逆道具LV3']; return lArrExchange;}
else if (item=='D7WQ2'){lArrExchange=['7', 6,10,6,1,0,2,'' ,'逆道具LV6']; return lArrExchange;}
else if (item=='S1WQ1'){lArrExchange=['A', 0, 0,0,0,1,0,'1','正常位LV1','断面図/射精']; return lArrExchange;}
else if (item=='S1WQ2'){lArrExchange=['A', 0, 0,0,0,1,1,'0','正常位LV2','断面図']; return lArrExchange;}
else if (item=='S1WQ3'){lArrExchange=['A', 0, 0,0,0,1,2,'' ,'正常位LV3']; return lArrExchange;}
else if (item=='S1WQ4'){lArrExchange=['A', 0, 0,0,1,1,0,'1','正常位LV4','断面図']; return lArrExchange;}
else if (item=='S1WQ5'){lArrExchange=['A', 0, 0,0,1,1,1,'0','正常位LV5','アブノ断面']; return lArrExchange;}
else if (item=='S3WQ6'){lArrExchange=['A', 0, 0,0,1,1,2,'0','正常位LV6','断面図']; return lArrExchange;}
else if (item=='S4WQ1'){lArrExchange=['B', 0, 0,1,0,1,0,'' ,'腰を振るLV1']; return lArrExchange;}
else if (item=='S3WQ5'){lArrExchange=['B', 0, 0,1,0,1,1,'' ,'腰を振るLV2']; return lArrExchange;}
else if (item=='S3WQ2'){lArrExchange=['B', 0, 0,1,0,1,2,'1','腰を振るLV3','擦り合い/射精']; return lArrExchange;}
else if (item=='S3WQ3'){lArrExchange=['B', 0, 0,1,1,1,0,'' ,'腰を振るLV4']; return lArrExchange;}
else if (item=='S3WQ1'){lArrExchange=['B', 0, 0,1,1,1,1,'0','腰を振るLV5','断面図']; return lArrExchange;}
else if (item=='S3WQ4'){lArrExchange=['B', 0, 0,1,1,1,2,'' ,'腰を振るLV6']; return lArrExchange;}
else if (item=='K1WQ1'){lArrExchange=['C', 8, 0,2,0,1,0,'' ,'騎乗位LV1']; return lArrExchange;}
else if (item=='K1WQ2'){lArrExchange=['C', 8, 0,2,0,1,1,'' ,'騎乗位LV2']; return lArrExchange;}
else if (item=='K1WQ3'){lArrExchange=['C', 8, 0,2,0,1,2,'0','騎乗位LV3','精液を付けて/射精']; return lArrExchange;}
else if (item=='K1WQ4'){lArrExchange=['C', 8, 0,2,1,1,0,'' ,'騎乗位LV4']; return lArrExchange;}
else if (item=='K1WQ5'){lArrExchange=['C', 8, 0,2,1,1,1,'' ,'騎乗位LV5','断面図']; return lArrExchange;}
else if (item=='K1WQ8'){lArrExchange=['C', 8, 0,2,1,1,2,'' ,'騎乗位LV6']; return lArrExchange;}
else if (item=='K7WQ1'){lArrExchange=['C', 8,10,2,0,1,2,'' ,'逆騎乗LV3']; return lArrExchange;}
else if (item=='K7WQ4'){lArrExchange=['C', 8,10,2,1,1,2,'' ,'逆騎乗LV6']; return lArrExchange;}
else if (item=='B1WQ1'){lArrExchange=['D', 9, 0,3,0,1,0,'' ,'後背位LV1']; return lArrExchange;}
else if (item=='B1WQ2'){lArrExchange=['D', 9, 0,3,0,1,1,'0','後背位LV2','断面図']; return lArrExchange;}
else if (item=='B1WQ3'){lArrExchange=['D', 9, 0,3,0,1,2,'1','後背位LV3','断面図']; return lArrExchange;}
else if (item=='B1WQ4'){lArrExchange=['D', 9, 0,3,1,1,0,'0','後背位LV4','アブノ断面/射精']; return lArrExchange;}
else if (item=='B3WQ5'){lArrExchange=['D', 9, 0,3,1,1,1,'' ,'後背位LV5']; return lArrExchange;}
else if (item=='B1WQ6'){lArrExchange=['D', 9, 0,3,1,1,2,'0','後背位LV6','後背・強']; return lArrExchange;}
else if (item=='B7WQ1'){lArrExchange=['D', 9,10,3,0,1,2,'' ,'逆後背LV3']; return lArrExchange;}
else if (item=='B7WQ4'){lArrExchange=['D', 9,10,3,1,1,2,'' ,'逆後背LV6']; return lArrExchange;}
else if (item=='K2WQ2'){lArrExchange=['E',10, 0,4,0,1,0,'' ,'強騎乗LV1']; return lArrExchange;}
else if (item=='K3WQ1'){lArrExchange=['E',10, 0,4,0,1,1,'' ,'強騎乗LV2']; return lArrExchange;}
else if (item=='K6WQ1'){lArrExchange=['E',10, 0,4,0,1,2,'1','強騎乗LV3','顔騎乗向き変え']; return lArrExchange;}
else if (item=='K3WQ2'){lArrExchange=['E',10, 0,4,1,1,0,'2','強騎乗LV4','アブノ断面']; return lArrExchange;}
else if (item=='K5WQ1'){lArrExchange=['E',10, 0,4,1,1,1,'0','強騎乗LV5','断面図']; return lArrExchange;}
else if (item=='K1WQ9'){lArrExchange=['E',10, 0,4,1,1,2,'1','強騎乗LV6','にゃん二人で']; return lArrExchange;}
else if (item=='B3WQ1'){lArrExchange=['E',10,10,4,0,1,0,'' ,'強後背LV1']; return lArrExchange;}
else if (item=='B3WQ2'){lArrExchange=['E',10,10,4,0,1,1,'1','強後背LV2','断面図']; return lArrExchange;}
else if (item=='B3WQ3'){lArrExchange=['E',10,10,4,0,1,2,'1','強後背LV3','浴槽で挿入2/射精']; return lArrExchange;}
else if (item=='B2WQ2'){lArrExchange=['E',10,10,4,1,1,0,'1','強後背LV4','浴槽で挿入1/射精']; return lArrExchange;}
else if (item=='B1WQ5'){lArrExchange=['E',10,10,4,1,1,1,'1','強後背LV5','断面図']; return lArrExchange;}
else if (item=='B3WQ6'){lArrExchange=['E',10,10,4,1,1,2,'' ,'強後背LV6']; return lArrExchange;}
else if (item=='S6WQ1'){lArrExchange=['F',11, 0,5,0,1,0,'1','指挿入LV1','アブノ断面']; return lArrExchange;}
else if (item=='S6WQ2'){lArrExchange=['F',11, 0,5,0,1,1,'' ,'指挿入LV2']; return lArrExchange;}
else if (item=='S6WQ5'){lArrExchange=['F',11, 0,5,0,1,2,'' ,'指挿入LV3']; return lArrExchange;}
else if (item=='S6WQ3'){lArrExchange=['F',11, 0,5,1,1,0,'0','指挿入LV4','舐めて/射精']; return lArrExchange;}
else if (item=='S6WQ4'){lArrExchange=['F',11, 0,5,1,1,1,'2','指挿入LV5','アブノ断面']; return lArrExchange;}
else if (item=='S6WQ6'){lArrExchange=['F',11, 0,5,1,1,2,'' ,'指挿入LV6']; return lArrExchange;}
else if (item=='F1WQ8'){lArrExchange=['F',11,10,5,0,1,2,'' ,'搾精LV3']; return lArrExchange;}
else if (item=='F1WQ7'){lArrExchange=['F',11,10,5,1,1,2,'' ,'搾精LV6']; return lArrExchange;}
else if (item=='B8WQ1'){lArrExchange=['G',12, 0,6,0,1,0,'1','アナルLV1','にゃん前貼り']; return lArrExchange;}
else if (item=='D8WQ1'){lArrExchange=['G',12, 0,6,0,1,1,'0','アナルLV2','にゃんオナニー/射精']; return lArrExchange;}
else if (item=='D8WQ9'){lArrExchange=['G',12, 0,6,0,1,2,'0','アナルLV3','にゃんジャンプ']; return lArrExchange;}
else if (item=='B8WQ2'){lArrExchange=['G',12, 0,6,1,1,0,'' ,'アナルLV4']; return lArrExchange;}
else if (item=='K8WQ1'){lArrExchange=['G',12, 0,6,1,1,1,'' ,'アナルLV5']; return lArrExchange;}
else if (item=='S8WQ1'){lArrExchange=['G',12, 0,6,1,1,2,'1','アナルLV6','にゃん変態プレイ']; return lArrExchange;}
else if (item=='D8WQ8'){lArrExchange=['G',12,10,6,0,1,2,'' ,'逆アナルLV3']; return lArrExchange;}
else if (item=='D8WQ7'){lArrExchange=['G',12,10,6,1,1,2,'' ,'逆アナルLV6']; return lArrExchange;}
else{return;}
}
function referBookMark(num)
{
// 栞の番号numからファイル名を獲得
var fn = kag.getBookMarkFileNameAtNum(num);
// ファイルfnから栞を読み込む
try {
if (!Storages.isExistentStorage(fn)) // ファイルがない
return void;
var modestr;
if (kag.saveThumbnail)
modestr += "o" + kag.calcThumbnailSize().size; // 指定オフセットからデータを読み込む
var data = Scripts.evalStorage(fn, modestr);
if(data.id != kag.saveDataID)
return void;
var result = data.user;
result = %[] if result === void;
return result;
}
catch(e) {
return void;
}
}
function shuffle(arr, num=0)
{
// 配列かそうでないかをチェック
if (!(arr instanceof "Array"))
throw new Exception("shuffle() : 第1引数には配列を指定してください");
if (arr.count < 2) // 要素数が1個以下なら直ちに終了
return;
// Math.RandomGeneratorオブジェクトを作成
var generator = new Math.RandomGenerator();
if (arr.count == 2) { // 要素数が2個なら…
if (generator.random() >= 0.5) {
arr[0] <-> arr[1]; // 1/2の確率で入れ替え
}
}
else if (arr.count > 2) { // 要素数が3個以上なら…
if (+num <= 0) {
num = arr.count; // 第2引数省略時、入れ替える回数を設定
}
for (var i = 0; i < num; i++) { // 入れ替える回数ぶん繰り返し
var x = int(generator.random()*arr.count); // 0arr.count-1が返る
var y;
do {
y = int(generator.random()*arr.count);
} while (y == x); // x != yとなるまで繰り返し
arr[x] <-> arr[y]; // 入れ替え
}
}
// Math.RandomGeneratorオブジェクトを無効化
invalidate generator;
}
class LayerMoving extends Window {
var laytimer; // タイマーオブジェクト
var startTime; // アニメーション開始時刻
var duration; // アニメーションの持続時間
var startValue; // 開始位置
var endValue; // 終了位置
var moving; // アニメーション実行中かどうかのフラグ
var currentYPosition; // レイヤーの現在のY座標
var minY = -740; // Y座標の最小値
var maxY = 20; // Y座標の最大値
var defaultDuration = 800; // デフォルトのデュレーション
var delayDuration = 10; // 遅延時間(ミリ秒)
var minX = 100; // アニメーションが起動するX座標の最小値
var maxX = 800; // アニメーションが起動するX座標の最大値
var mouseYstart = 200; // マウス位置のスタート地点
var amplificationFactor = 1.5; // 移動量の増幅係数
var lastMouseX; // 前回のマウスX座標
var lastMouseY; // 前回のマウスY座標
var lastMouseTime; // 前回のマウス移動時間
var mouseStillTime = 300; // マウスが静止していると判断する時間(ミリ秒)
// コンストラクタ
function LayerMoving() {
laytimer = new Timer(this, "action");
add(laytimer);
laytimer.interval = 1;
laytimer.enabled = true;
startTime = System.getTickCount();
duration = 800;
startValue = 0;
endValue = 200;
moving = true;
currentYPosition = 0;
lastMouseX = 0;
lastMouseY = 0;
lastMouseTime = System.getTickCount();
}
// デストラクタ
function finalize() {
super.finalize();
}
// 加速度を計算する関数
function easeIn(currentTime, startValue, changeInValue, duration) {
currentTime /= duration;
return changeInValue * currentTime * currentTime + startValue;
}
// 減速を計算する関数
function easeOut(currentTime, startValue, changeInValue, duration) {
currentTime /= duration;
return -changeInValue * currentTime * (currentTime - 2) + startValue;
}
// アニメーションをリセットする関数
function resetAnimation() {
if (!moving) {
startTime = System.getTickCount();
moving = true;
}
}
// アニメーションの動きを制御する関数
function Moves() {
if (!moving) return;
var currentTime = System.getTickCount() - startTime;
if (currentTime > duration) {
currentTime = duration;
moving = false;
startValue = currentYPosition;
} else {
var changeInValue = endValue - startValue;
var currentPosition = easeOut(currentTime, startValue, changeInValue, duration);
currentYPosition = currentPosition;
kag.movies[0].setPos(krkrLeft, currentPosition);
}
}
// マウスの動きに応じてアニメーションを制御する関数
function action(ev) {
var mouseY = kag.primaryLayer.cursorY;
var targetY = (mouseY - mouseYstart) * amplificationFactor;
if (targetY < minY) {
endValue = minY;
} else if (targetY > maxY) {
endValue = maxY;
} else {
endValue = targetY;
}
startValue = currentYPosition;
duration = defaultDuration;
startTime = System.getTickCount();
moving = true;
}
// マウス移動イベントの処理
function onMouseMove(x, y, shift) {
var currentTime = System.getTickCount();
var deltaX = Math.abs(x - lastMouseX);
var deltaY = Math.abs(y - lastMouseY);
var deltaTime = currentTime - lastMouseTime;
if (deltaX > 50 || deltaY > 50 || deltaTime > mouseStillTime) {
lastMouseX = x;
lastMouseY = y;
lastMouseTime = currentTime;
action();
}
super.onMouseMove(x, y, shift);
}
}
//var layTim = new LayerMoving();
class GaugeFlash extends Window {
var Gaugetimer;
var layer6 = kag.fore.layers[1];
var opss;
// コンストラクタ
function GaugeFlash() {
Gaugetimer = new Timer(this, "action");
add(Gaugetimer);
Gaugetimer.interval = 1000;
Gaugetimer.enabled = true;
}
// デストラクタ
function finalize() {
super.finalize();
}
function action(ev) {
opss = 255 - Math.abs((System.getTickCount() % 510) - 255);
layer6.adjustGamma(1.0, 0, opss, 1.0, 0, 255, 1.0, 0, 255);
}
}
//var asdf = new GaugeFlash();
System.onActivate = function() {
// ここにウィンドウがアクティブになった時に実行したいコードを書く!!!
lFocused=1;
};
System.onDeactivate = function() {
// ここにウィンドウがアクティブになった時に実行したいコードを書く!!!
lFocused=0;
};
[endscript]
[return]