キーボード縦移動修正
by
cutfloss
06/01 [2026/06/01 00:28:51]
キーボード縦移動時にちゃんとまっすぐになるぞ!
@@ -4,60 +4,58 @@
* @private
*/
javascript:(function(){
- if (window._arrowPwmPatch) {
+ /* 二重適用防止 */
+ if (window._perfectArrowPwmPatch) {
alert('パッチはすでに適用されています。');
return;
}
- /* 直進モードの状態管理 */
let straightMode = null; /* 'up', 'down', null */
- let toggleState = false; /* 63と64、190と191を切り替えるフラグ */
+ let toggleState = false;
- /* 矢印キーの入力をブラウザ全体で監視(W/Sではなく、完全に矢印キー限定) */
+ /* 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(); /* ゲーム側の元の移動処理を止める */
+ e.stopPropagation();
} else if (e.key === 'ArrowDown') {
- /* ↓キー:すでに下直進中なら解除、そうでなければセット */
straightMode = (straightMode === 'down') ? null : 'down';
- e.stopPropagation(); /* ゲーム側の元の移動処理を止める */
+ e.stopPropagation();
} else if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
- /* 左右の矢印キーが押されたら、安全のために直進モードを解除 */
- straightMode = null;
+ straightMode = null; /* 左右を押したら解除 */
}
- }, true); /* trueでゲームの処理より先に割り込む */
+ }, true);
- /* 画面タップやマウスクリックでも直進を解除できるようにする(安全装置) */
+ /* 画面タップやクリックでも自動直進を安全に解除 */
window.addEventListener('mousedown', () => { straightMode = null; }, true);
window.addEventListener('touchstart', () => { straightMode = null; }, true);
- /* WebSocketの送信関数(大元)をハック */
- const originalSend = WebSocket.prototype.send;
- WebSocket.prototype.send = function(data) {
-
- /* 直進モードがON、かつ送信データが1バイトの移動パケットのとき */
- if (straightMode && data && (data.byteLength === 1 || data.length === 1)) {
- const view = new Uint8Array(data.buffer || data);
+ /* 2. ゲームの計算ループの「直前」に潜り込んで、dxの数値を一瞬だけ騙す */
+ setInterval(function() {
+ /* ゲームの入力状態オブジェクト(inputState)が存在するか安全に確認 */
+ if (typeof inputState !== 'undefined' && inputState !== null) {
- /* パケットが送られるたびにフラグを反転させて交互にする */
- toggleState = !toggleState;
-
if (straightMode === 'up') {
- /* 63(わずかに左)と 64(わずかに右)を交互に送り、ピクセル解せるズレをその場で相殺 */
- view[0] = toggleState ? 63 : 64;
+ /* 上に自動直進中 */
+ inputState.dy = -1;
+ /* 63と64の計算結果を交互に生み出す魔法の極小小数 */
+ toggleState = !toggleState;
+ inputState.dx = toggleState ? 0.01238 : -0.01238;
+ inputState.drawing = true;
} else if (straightMode === 'down') {
- /* 190(わずかに右)と 191(わずかに左)を交互に送り、ピクセル解せるズレをその場で相殺 */
- view[0] = toggleState ? 190 : 191;
+ /* 下に自動直進中 */
+ inputState.dy = 1;
+ /* 190と191の計算結果を交互に生み出す魔法の極小小数 */
+ toggleState = !toggleState;
+ inputState.dx = toggleState ? -0.01238 : 0.01238;
+ inputState.drawing = true;
}
+ /* 左右や停止時はゲーム本来の入力(0)に任せるため何もしない */
}
- return originalSend.apply(this, arguments);
- };
+ }, 1000 / 60); /* ゲームの1フレーム(16ミリ秒)ごとに完全に同期 */
- window._arrowPwmPatch = true;
- alert('【ディザリング直進パッチ:矢印キー版】\n・↑ キー:真上へ自動直進(1回押すだけ)\n・↓ キー:真下へ自動直進(1回押すだけ)\n\n※もう一度同じキーを押すか、左右キー、画面タップでいつでも解除できます!');
+ window._perfectArrowPwmPatch = true;
+ alert('【決定版:入力同期ディザリングパッチ】\n通信を一切汚さず、ゲームの計算の瞬間だけ「魔法の傾き」を交互に注入します!\n\n・↑ キー:真上へ自動直進\n・↓ キー:真下へ自動直進\n(もう一度押すか、左右キー・画面タップで解除)');
})();
/*
* @title キーボード縦移動修正
* @description キーボード縦移動時にちゃんとまっすぐになるぞ!
* @private
*/
javascript:(function(){
/* 二重適用防止 */
if (window._perfectArrowPwmPatch) {
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の数値を一瞬だけ騙す */
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;
}
/* 左右や停止時はゲーム本来の入力(0)に任せるため何もしない */
}
}, 1000 / 60); /* ゲームの1フレーム(16ミリ秒)ごとに完全に同期 */
window._perfectArrowPwmPatch = true;
alert('【決定版:入力同期ディザリングパッチ】\n通信を一切汚さず、ゲームの計算の瞬間だけ「魔法の傾き」を交互に注入します!\n\n・↑ キー:真上へ自動直進\n・↓ キー:真下へ自動直進\n(もう一度押すか、左右キー・画面タップで解除)');
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。