キーボード縦移動修正
by
cutfloss
06/01 [2026/06/01 00:28:51]
キーボード縦移動時にちゃんとまっすぐになるぞ!
@@ -4,36 +4,45 @@
* @private
*/
javascript:(function(){
- if (window._directKeyboardPatch) {
+ if (window._networkPerfectStraightPatch) {
alert('パッチはすでに適用されています。');
return;
}
- /* ブラウザ全体のキーボード入力を監視 */
- window.addEventListener('keydown', function(e) {
- if (!socket || socket.readyState !== WebSocket.OPEN) return;
-
- /* チャット入力中(もしあれば)などは誤発動を防ぐ */
- if (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA') return;
+ /* キーボードの押し状態をブラウザ全体で独自に監視(ゲームの設定に依存しない) */
+ const myKeys = {};
+ window.addEventListener('keydown', e => { myKeys[e.key.toLowerCase()] = true; }, true);
+ window.addEventListener('keyup', e => { myKeys[e.key.toLowerCase()] = false; }, true);
- let angleByte = null;
+ /* WebSocketの送信機能そのものをハック */
+ const originalSend = WebSocket.prototype.send;
+ WebSocket.prototype.send = function(data) {
+
+ /* 送信データが1バイト(Uint8Array または ArrayBuffer)の移動パケットかチェック */
+ if (data && (data.byteLength === 1 || data.length === 1)) {
+ const view = new Uint8Array(data.buffer || data);
+ let angleByte = view[0];
- /* 押されたキーが「上」か「下」のときだけ、完璧な整数を直接指定 */
- if (e.key === 'ArrowUp' || e.key === 'w' || e.key === 'W') {
- angleByte = 63; /* 完璧な真上(63.5の切り捨て) */
- } else if (e.key === 'ArrowDown' || e.key === 's' || e.key === 'S') {
- angleByte = 191; /* 完璧な真下(190.5の切り上げ) */
- }
+ const up = myKeys['arrowup'] || myKeys['w'];
+ const down = myKeys['arrowdown'] || myKeys['s'];
+ const left = myKeys['arrowleft'] || myKeys['a'];
+ const right = myKeys['arrowright'] || myKeys['gridscore' /* 誤発動防止 */] || myKeys['d'];
- if (angleByte !== null) {
- /* ゲーム本来の送信処理を完全にバイパスして、直接サーバーへ1バイト送信 */
- socket.send(new Uint8Array([angleByte]));
-
- /* ゲーム側に「キーが押されたイベント」を伝えないようにして、元のズレる計算をストップさせる */
- e.stopPropagation();
+ /* 左右が押されておらず、縦移動だけのとき、パケットの数値を直接書き換える */
+ if ((up || down) && !left && !right) {
+ if (up) {
+ /* 切り上げられて64になっていたのを、力技で完璧な垂直の「63」に固定! */
+ view[0] = 63;
+ } else if (down) {
+ /* 切り上げられて191になっていたのを、力技で完璧な垂直の「190」に固定! */
+ view[0] = 190;
+ }
+ }
}
- }, true); /* trueにすることで、ゲームの処理より「絶対に先」に実行させます */
+ /* 本来の送信処理を実行 */
+ return originalSend.apply(this, arguments);
+ };
- window._directKeyboardPatch = true;
- alert('【キーボード直撃パッチ】\n隠し関数を無視し、ブラウザのキー入力を直接ハックしました!上・下移動が完全直進化します。');
+ window._networkPerfectStraightPatch = true;
+ alert('【通信軸・ステルス直進パッチ】\nサーバーへ送信される直前のパケットを捕まえ、完璧な垂直(63 / 190)に修正しました。もう絶対にズレません!');
})();
/*
* @title キーボード縦移動修正
* @description キーボード縦移動時にちゃんとまっすぐになるぞ!
* @private
*/
javascript:(function(){
if (window._networkPerfectStraightPatch) {
alert('パッチはすでに適用されています。');
return;
}
/* キーボードの押し状態をブラウザ全体で独自に監視(ゲームの設定に依存しない) */
const myKeys = {};
window.addEventListener('keydown', e => { myKeys[e.key.toLowerCase()] = true; }, true);
window.addEventListener('keyup', e => { myKeys[e.key.toLowerCase()] = false; }, true);
/* WebSocketの送信機能そのものをハック */
const originalSend = WebSocket.prototype.send;
WebSocket.prototype.send = function(data) {
/* 送信データが1バイト(Uint8Array または ArrayBuffer)の移動パケットかチェック */
if (data && (data.byteLength === 1 || data.length === 1)) {
const view = new Uint8Array(data.buffer || data);
let angleByte = view[0];
const up = myKeys['arrowup'] || myKeys['w'];
const down = myKeys['arrowdown'] || myKeys['s'];
const left = myKeys['arrowleft'] || myKeys['a'];
const right = myKeys['arrowright'] || myKeys['gridscore' /* 誤発動防止 */] || myKeys['d'];
/* 左右が押されておらず、縦移動だけのとき、パケットの数値を直接書き換える */
if ((up || down) && !left && !right) {
if (up) {
/* 切り上げられて64になっていたのを、力技で完璧な垂直の「63」に固定! */
view[0] = 63;
} else if (down) {
/* 切り上げられて191になっていたのを、力技で完璧な垂直の「190」に固定! */
view[0] = 190;
}
}
}
/* 本来の送信処理を実行 */
return originalSend.apply(this, arguments);
};
window._networkPerfectStraightPatch = true;
alert('【通信軸・ステルス直進パッチ】\nサーバーへ送信される直前のパケットを捕まえ、完璧な垂直(63 / 190)に修正しました。もう絶対にズレません!');
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。