非公開 キーボード縦移動修正

    @@ -4,58 +4,34 @@ * @private */ javascript:(function(){ - /* 二重適用防止 */ - if (window._perfectArrowPwmPatch) { + if (window._vectorInvertPatch) { alert('パッチはすでに適用されています。'); return; } - let straightMode = null; /* 'up', 'down', null */ - let toggleState = false; - - /* 1. 矢印キーの入力を監視して、自動直進モードのON/OFFだけを切り替える */ - window.addEventListener('keydown', function(e) { - if (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA') return; - - if (e.key === 'ArrowUp') { - straightMode = (straightMode === 'up') ? null : 'up'; - e.stopPropagation(); - } else if (e.key === 'ArrowDown') { - straightMode = (straightMode === 'down') ? null : 'down'; - e.stopPropagation(); - } else if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') { - straightMode = null; /* 左右を押したら解除 */ - } - }, true); - - /* 画面タップやクリックでも自動直進を安全に解除 */ - window.addEventListener('mousedown', () => { straightMode = null; }, true); - window.addEventListener('touchstart', () => { straightMode = null; }, true); - - /* 2. ゲームの計算ループの「直前」に潜り込んで、dxの数値を一瞬だけ騙す */ + /* 60FPSで動作し、ゲーム本来の移動ベクトルに「逆向きの力」を足し算する */ setInterval(function() { - /* ゲームの入力状態オブジェクト(inputState)が存在するか安全に確認 */ if (typeof inputState !== 'undefined' && inputState !== null) { - - if (straightMode === 'up') { - /* 上に自動直進中 */ - inputState.dy = -1; - /* 63と64の計算結果を交互に生み出す魔法の極小小数 */ - toggleState = !toggleState; - inputState.dx = toggleState ? 0.01238 : -0.01238; - inputState.drawing = true; - } else if (straightMode === 'down') { - /* 下に自動直進中 */ - inputState.dy = 1; - /* 190と191の計算結果を交互に生み出す魔法の極小小数 */ - toggleState = !toggleState; - inputState.dx = toggleState ? -0.01238 : 0.01238; - inputState.drawing = true; + const dx = inputState.dx; + const dy = inputState.dy; + + /* 司令官がキーボードで「縦方向(上下)」に入力しているときだけ発動 */ + if (dx === 0 && dy !== 0) { + if (dy < 0) { + /* 【真上移動のとき】 */ + /* 本来は右に逸れる(angleByteが64になる)ので、 */ + /* あえて極小のマイナス(左)を足して、強制的に「左に逸れる(63)」状態にします */ + inputState.dx = -0.015; + } else if (dy > 0) { + /* 【真下移動のとき】 */ + /* 本来は左に逸れる(angleByteが191になる)ので、 */ + /* あえて極小のプラス(右)を足して、強制的に「右に逸れる(190)」状態にします */ + inputState.dx = 0.015; + } } - /* 左右や停止時はゲーム本来の入力(0)に任せるため何もしない */ } - }, 1000 / 60); /* ゲームの1フレーム(16ミリ秒)ごとに完全に同期 */ + }, 1000 / 60); - window._perfectArrowPwmPatch = true; - alert('【決定版:入力同期ディザリングパッチ】\n通信を一切汚さず、ゲームの計算の瞬間だけ「魔法の傾き」を交互に注入します!\n\n・↑ キー:真上へ自動直進\n・↓ キー:真下へ自動直進\n(もう一度押すか、左右キー・画面タップで解除)'); + window._vectorInvertPatch = true; + alert('【挙動反転パッチ】\n上移動時は「左」へ、下移動時は「右」へ逸れるように挙動を反転させました!'); })();
  • /*
     * @title キーボード縦移動修正
     * @description キーボード縦移動時にちゃんとまっすぐになるぞ!
     * @private
     */
    javascript:(function(){
        if (window._vectorInvertPatch) {
            alert('パッチはすでに適用されています。');
            return;
        }
    
        /* 60FPSで動作し、ゲーム本来の移動ベクトルに「逆向きの力」を足し算する */
        setInterval(function() {
            if (typeof inputState !== 'undefined' && inputState !== null) {
                const dx = inputState.dx;
                const dy = inputState.dy;
    
                /* 司令官がキーボードで「縦方向(上下)」に入力しているときだけ発動 */
                if (dx === 0 && dy !== 0) {
                    if (dy < 0) {
                        /* 【真上移動のとき】 */
                        /* 本来は右に逸れる(angleByteが64になる)ので、 */
                        /* あえて極小のマイナス(左)を足して、強制的に「左に逸れる(63)」状態にします */
                        inputState.dx = -0.015;
                    } else if (dy > 0) {
                        /* 【真下移動のとき】 */
                        /* 本来は左に逸れる(angleByteが191になる)ので、 */
                        /* あえて極小のプラス(右)を足して、強制的に「右に逸れる(190)」状態にします */
                        inputState.dx = 0.015;
                    }
                }
            }
        }, 1000 / 60);
    
        window._vectorInvertPatch = true;
        alert('【挙動反転パッチ】\n上移動時は「左」へ、下移動時は「右」へ逸れるように挙動を反転させました!');
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。