Index: D:/himeriri/data/system/Thumbs.db =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: D:/himeriri/data/system/MessageLayer.tjs =================================================================== --- D:/himeriri/data/system/MessageLayer.tjs (revision 3) +++ D:/himeriri/data/system/MessageLayer.tjs (revision 15) @@ -37,10 +37,18 @@ function onMouseUp(x, y, button, shift) { - if(enabled && button == mbLeft) parent.onButtonClick(linkNum); + if(!parent.selProcessLock && enabled && button == mbLeft) parent.onButtonClick(linkNum); if(this isvalid) super.onMouseUp(...); } + function onMouseDown(x, y, button) + { + super.onMouseDown(...); + if(button == mbRight) { + window.onPrimaryRightClick(); + } + } + function onMouseEnter() { parent.keyLink = linkNum; @@ -505,6 +513,8 @@ draggable = +elm.draggable if elm.draggable !== void; visible = +elm.visible if elm.visible !== void; + type = global[elm.type] if elm.type !== void; + clear(); } Index: D:/himeriri/data/system/Menus.tjs =================================================================== --- D:/himeriri/data/system/Menus.tjs (revision 3) +++ D:/himeriri/data/system/Menus.tjs (revision 15) @@ -10,7 +10,7 @@ systemMenu.add(this.rightClickMenuItem = new KAGMenuItem(this, "メッセージを消す(&S)", 0, onRightClickMenuItemClick, false)); - systemMenu.add(this.showHistoryMenuItem = new KAGMenuItem(this, "メッセージ履歴の表示(&H)", 0, + systemMenu.add(this.showHistoryMenuItem = new KAGMenuItem(this, "メッセージ履歴の表示(Shift)", 0, onShowHistoryMenuItemClick, false)); systemMenu.add(this.skipToNextStopMenuItem = new KAGMenuItem(this, @@ -127,7 +127,7 @@ } else { - menu.add(this.restoreMenu = new KAGMenuItem(this, "栞をたどる(&J)", 0, onRestoreMenuClick, false)); + menu.add(this.restoreMenu = new KAGMenuItem(this, "ロード(&J)", 0, onRestoreMenuClick, false)); menu.add(this.storeMenu = new KAGMenuItem(this, "栞をはさむ(&M)", 0, onStoreMenuClick, false)); } @@ -141,6 +141,8 @@ menu.add(this.debugMenu = new KAGMenuItem(this, "デバッグ(&D)", 0, void, false)); + debugMenu.add(this.loadScenarioMenuItem = new KAGMenuItem(this, "シナリオの読込み(&R)", 1, + onExecDialogMenuItemClick, false)); debugMenu.add(this.reloadScenarioMenuItem = new KAGMenuItem(this, "シナリオの再読込み(&R)", 1, onReloadScenarioMenuItemClick, false)); debugMenu.add(this.showConsoleMenuItem = new KAGMenuItem(this, "コンソール(&C)\tShift+F4", 1, Index: D:/himeriri/data/system/Initialize.tjs =================================================================== --- D:/himeriri/data/system/Initialize.tjs (revision 3) +++ D:/himeriri/data/system/Initialize.tjs (revision 15) @@ -198,6 +198,7 @@ property ButtonLayer { getter() { KAGLoadScript("ButtonLayer.tjs"); return global.ButtonLayer; } } property EditLayer { getter() { KAGLoadScript("EditLayer.tjs"); return global.EditLayer; } } property KAGPlugin { getter() { KAGLoadScript("Plugin.tjs"); return global.KAGPlugin; } } +property execDialog { getter() { KAGLoadScript("ExecDialog.tjs"); return global.execDialog; } } /* 各システム読み込み Index: D:/himeriri/data/system/ExecDialog.tjs =================================================================== --- D:/himeriri/data/system/ExecDialog.tjs (revision 0) +++ D:/himeriri/data/system/ExecDialog.tjs (revision 15) @@ -0,0 +1,166 @@ +class ExecEditLayer extends EditLayer +{ + function ExecEditLayer() { + super.EditLayer(...); + } + + function onKeyDown(key) + { + if(key == VK_RETURN) { + window.exec(); + } else super.onKeyDown(...); + } +} + +class ExecDialogWindow extends Window +{ + var edit; // 編集欄 + var okButton; // [OK] ボタン + var cancelButton; // [キャンセル] ボタン + + function ExecDialogWindow() + { + super.Window(); + + borderStyle = bsDialog; + innerSunken = false; + caption = "シナリオの読込み"; + + // プライマリレイヤの作成 + add(new Layer(this, null)); + + // サイズを決定 + var w = 200; + var h = 100; + + setInnerSize(w, h); + primaryLayer.width = w; + primaryLayer.height = h; + primaryLayer.colorRect(0, 0, w, h, clBtnFace, 255); + + // ウィンドウ位置の調整 + if(global.Window.mainWindow !== null && global.Window.mainWindow isvalid) + { + var win = global.Window.mainWindow; + var l, t; + l = ((win.width - width)>>1) + win.left; + t = ((win.height - height)>>1) + win.top; + if(l < 0) l = 0; + if(t < 0) t = 0; + if(l + width > System.screenWidth) l = System.screenWidth - width; + if(t + height > System.screenHeight) t = System.screenHeight - height; + setPos(l, t); + } + else + { + setPos((System.screenWidth - width)>>1, (System.screenHeight - height)>>1); + } + + // エディット + add(edit = new ExecEditLayer(this, primaryLayer)); + edit.width = 150; + edit.height = 25; + edit.top = 10; + edit.left = (w - (150 + 10)>>1); + edit.visible = true; + + // Yesボタン + add(okButton = new ButtonLayer(this, primaryLayer)); + okButton.caption = "OK"; + okButton.captionColor = clBtnText; + okButton.width = 70; + okButton.height = 25; + okButton.top = 50; + okButton.left = (w - (70*2 + 10)>>1); + okButton.visible = true; + + // Noボタン + add(cancelButton = new ButtonLayer(this, primaryLayer)); + cancelButton.caption = "CANCEL"; + cancelButton.captionColor = clBtnText; + cancelButton.width = 70; + cancelButton.height = 25; + cancelButton.top = 50; + cancelButton.left = ((w - (70*2 + 10))>>1) + 70 + 10; + cancelButton.visible = true; + + edit.focus(); + } + + function exec() { + try { + if (edit.Edit_text != "") { + kag.process(edit.Edit_text, ""); + } + } catch(e) { + Debug.notice("シナリオを実行できませんでした : " + e.message); + } + close(); + } + + function finalize() + { + super.finalize(...); + } + + function action(ev) + { + // action + if(ev.type == "onClick") + { + if(ev.target == okButton) + { + exec(); + } + else if(ev.target == cancelButton) + { + close(); + } + } + else if(ev.type == "onKeyDown" && ev.target === this) + { + // パッド入力に対応する処理 + switch(ev.key) + { + case VK_PADLEFT: + okButton.focus(); + break; + case VK_PADRIGHT: + cancelButton.focus(); + break; + case VK_PAD1: + if(focusedLayer == okButton) + { + exec(); + } + else if(focusedLayer == cancelButton) + { + close(); + } + break; + case VK_PAD2: + close(); + break; + } + } + } + + function onKeyDown(key, shift) + { + super.onKeyDown(...); + if(key == VK_ESCAPE) + { + // ESC キーが押された + // 「いいえ」として処理 + close(); + } + } +} + +// Yes か No かはっきりさせる関数 +function execDialog() +{ + var win = new ExecDialogWindow(); + win.showModal(); + invalidate win; +} Index: D:/himeriri/data/system/Config.tjs =================================================================== --- D:/himeriri/data/system/Config.tjs (revision 3) +++ D:/himeriri/data/system/Config.tjs (revision 15) @@ -153,7 +153,7 @@ // 簡単には読めないようなデータになるので、栞の圧縮は暗号化を // 兼ねています。 // "" を指定すると栞の暗号化や圧縮はされません。 -;saveDataMode = "z"; +;saveDataMode = ""; // ◆ 栞にマクロの情報を保存するかどうか @@ -272,7 +272,7 @@ // 数が多いと速度が低下したりメモリを消費しますので、必要以上に大きな数を指 // 定しない方が良いでしょう。 // laycount タグでシナリオ内でも変更できます。 -;numCharacterLayers = 41; +;numCharacterLayers = 10; // ◆ 前景レイヤの左右中心位置指定 @@ -304,7 +304,7 @@ // ◆ 初期状態のメッセージレイヤの数 // 前景レイヤと違って、0 を指定することはできません。これも必要な数だけ確保 // するようにすべきです。laycount タグでシナリオ内でも変更できます。 -;numMessageLayers = 10; +;numMessageLayers = 5; // ◆ 初期状態でメッセージレイヤを表示するかどうか @@ -434,7 +434,7 @@ // ◆ 「栞をたどる」 -;restoreMenu.visible = false; +;restoreMenu.visible = true; // ◆ 「栞をはさむ」 @@ -458,7 +458,7 @@ // ◆ 「デバッグ」 -;debugMenu.visible = false; +;debugMenu.visible = true; // ◆ メニュー 追加の設定 Index: D:/himeriri/data/system/ButtonLayer.tjs =================================================================== --- D:/himeriri/data/system/ButtonLayer.tjs (revision 3) +++ D:/himeriri/data/system/ButtonLayer.tjs (revision 15) @@ -140,12 +140,14 @@ update(); } - function onMouseDown() + function onMouseDown(x, y, button) { // onMouseDown イベントハンドラ - Butt_mouseDown = true; - focus(); - update(); + if (button == mbLeft) { + Butt_mouseDown = true; + focus(); + update(); + } super.onMouseDown(...); } Index: D:/himeriri/data/system/MainWindow.tjs =================================================================== --- D:/himeriri/data/system/MainWindow.tjs (revision 3) +++ D:/himeriri/data/system/MainWindow.tjs (revision 15) @@ -902,6 +902,12 @@ invalidate win; } + // シナリオ実行ダイアログ呼び出し + function onExecDialogMenuItemClick(sender) + { + execDialog(); + } + function onReloadScenarioMenuItemClick(sender) { saveBookMark(1000, false); @@ -2818,7 +2824,9 @@ function onPrimaryRightClick() { - // プライマリレイヤで右クリックされたときに呼ばれる + dm("右クリック!"); + + // プライマリレイヤで右クリックされたときに呼ばれる if(!callHook(rightClickHook)) { if(getKeyState(VK_LBUTTON)) @@ -3477,7 +3485,7 @@ function skipToStop() { - // 次の停止までスキップ + // 次の停止までスキップ onPrimaryClick(); // クリックの動作をエミュレートする skipMode = 3; actualChSpeed = 0; @@ -3821,9 +3829,19 @@ function processKeys(key, shift) { - if(checkProceedingKey(key, shift)) return; + if(key == VK_CONTROL) { + var sg = getKeyState; + if(sg(VK_CONTROL)){ + if(clickSkipEnabled){ + if(skipMode != 4) + skipToStop2(); // まだskipMode 4に入っていない場合は早送りモードに入る + } + } + } - if(key == #'F' || key == VK_CONTROL) + if(checkProceedingKey(key, shift)) return; + + if(key == #'F' || (key == VK_DOWN && (shift & ssShift)) /*|| key == VK_CONTROL*/) { // 次の選択肢/未読まで進む skipToNextStopByKey(); @@ -3863,14 +3881,18 @@ } } - // if(key == #'R' || (key == VK_UP && (shift & ssShift) || shift)) - if(key == #'R' || key == VK_SHIFT) + if(key == #'R' || (key == VK_UP && (shift & ssShift)) || key == VK_PRIOR) { // メッセージ履歴を表示 showHistoryByKey(); return; } + if (key == #'V' || key == VK_BACK) { + // メッセージ窓の処理 + switchMessageLayerHiddenByUser(); + } + if(key == VK_ESCAPE) { // メッセージを消す @@ -4103,7 +4125,7 @@ function showPageBreak(elm) { - // 現在のメッセージレイヤにページ待ち記号を表示する + // 現在のメッセージレイヤにページ待ち記号を表示する stablePosibility = true; if(skipMode == 1 || skipMode == 2) cancelSkip(); if(skipMode == 4 && !skipKeyPressing()) cancelSkip(); @@ -4570,6 +4592,78 @@ //------------------------------------------------------- タグハンドラ群 -- + var chr_name = ["rr", "ll", "r", "l", "cr", "cl", "c", "f"]; + var chr_left = [300, -300, 200, -200, 100, -100, 0]; + + function drawbg(base, elm) { + base.base.loadImages(%[storage : elm.cg !== void ? elm.cg : "black", + flip : elm.lr !== void ? elm.lr : void, + mopacity : elm.mopa !== void ? elm.mopa : 0, + mcolor : elm.mcolor !== void ? elm.mcolor : 0]); + } + + function clearchr(base) { + for (var i=0;i<8;i++) { + base.layers[i].visible = false; + } + } + + function drawchr(base, elm) { + for (var i=0;i<8;i++) { + var basename = chr_name[i]; + var colorname = basename + "_color"; + var opaname = basename + "_opa"; + var flrname = basename + "_flr"; + var indexname = basename + "_index"; + var left = i==7 ? elm.left !== void ? elm.left : 0 : chr_left[i]; + var top = i==7 ? elm.top !== void ? elm.top : 0 : 0; + if (elm[basename] !== void) { + base.layers[i].visible = true; + base.layers[i].loadImages(%[ storage : elm[basename], + rgamma : f.rgamma, + ggamma : f.ggamma, + bgamma : f.bgamma, + top : top, + left : left, + mopacity : elm.mopa !== void ? elm.mopa : 0, + mcolor : elm[colorname] !== void ? elm[colorname] : 0, + opacity: elm[opaname] !== void ? elm[opaname] : 255, + fliplr : elm[flrname] !== void ? elm[flrname] : void, + index : elm[indexname] !== void ? elm[indexname] : void + ]); + } else { + base.layers[i].visible = false; + } + } + if (elm.p !== void) { + var lay = elm.lay !== void ? elm.lay : 6; + base.layers[lay].loadPartialImage(%[ storage : elm.p, + dx: elm.x !== void ? elm.x : 0, + dy: elm.y !== void ? elm.y : 9 ]); + } + } + + function dotrans(elm, time=1000) { + // トランジション実行 + fore.base.beginTransition(%[time : elm.time !== void ? elm.time : time, + method : elm.method !== void ? elm.method : "crossfade", + rule : elm.rule !== void ? elm.rule : void, + from : elm.from !== void ? elm.from : void, + stay : elm.stay !== void ? elm.stay : void, + speed : elm.speed !== void ? elm.speed : 10, + centerx : elm.centerx !== void ? elm.centerx : 320, + centery : elm.centery !== void ? elm.centerx : 240, + ]); + return waitTransition(%[]); + } + + function playVoice(storage, vol) { + if (sf.voice == 1 && !skipMode) { + se[2].setOptions(%[volume : vol]); + se[2].play(%[storage : storage, loop : false]); + } + } + function getHandlers() { return %[ // 辞書配列オブジェクト @@ -5642,6 +5736,83 @@ //----------------------------------------------- タグハンドラ群の終わり -- + drawbg : function(elm) { + + updateBeforeCh = 1; + + var base; + var trans; + if (sf.effect == 0 || skipMode) { + dm("表に高速描画"); + base = fore; + trans = false; + } else { + dm("裏に描画"); + base = back; + backupLayer(%[], true); + trans = true; + } + + clearchr(base); + drawbg(base, elm); + return trans ? dotrans(elm) : 0; + + } incontextof this, + + drawchr : function(elm) { + + var base; + var trans; + if (sf.effect == 0 || skipMode) { + dm("表に高速描画"); + base = fore; + trans = false; + } else { + dm("裏に描画"); + backupLayer(%[], true); + base = back; + trans = true; + } + + drawchr(base, elm); + return trans ? dotrans(elm, 600) : 0; + + } incontextof this, + + drawbgchr : function(elm) { + + updateBeforeCh = 1; + + var base; + var trans; + if (sf.effect == 0 || skipMode) { + dm("表に高速描画"); + base = fore; + trans = false; + } else { + dm("裏に描画"); + base = back; + backupLayer(%[], true); + trans = true; + } + + drawchr(base, elm); + drawbg(base, elm); + return trans ? dotrans(elm) : 0; + + } incontextof this, + + vo : function(elm) { + var vol = elm.vol !== void ? +elm.vol : 100; + if (historyWriteEnabled) { + kag.historyLayer.setNewAction("kag.playVoice(\"" + elm.vo + "\"," + vol + ")"); + } + playVoice(elm.vo, vol); + return 0; + } incontextof this, + + //----------------------------------------------- タグハンドラ群の終わり -- + interrupt : function(elm) { return -2; } incontextof this ]; } }