キーボード縦移動修正
by
cutfloss
06/01 [2026/06/01 00:28:51]
キーボード縦移動時にちゃんとまっすぐになるぞ!
@@ -4,49 +4,47 @@
* @private
*/
javascript:(function(){
- /* 1. すでにパッチが適用されている場合は二重適用を防ぐ */
- if (window._keyboardStraightPatchApplied) {
- alert('パッチはすでに適用されています。');
- return;
- }
-
- /* 2. 入力送信関数をフック(上書き)する */
+ /* 1. client-network.js の本当の送信関数を上書き */
if (typeof sendInput === 'function') {
- const originalSendInput = window.sendInput;
- window.sendInput = function(angle) {
- let fixedAngle = angle;
+ window.sendInput = function() {
+ if (!socket || socket.readyState !== WebSocket.OPEN) return;
+ if (!isGameReady || myId === null) return;
- /* キーボードが押されているかチェック(client-game.jsのkeysオブジェクトを参照) */
+ /* 基本はゲームが持っている現在の角度を使う */
+ let angle = inputAngle;
+
+ /* キーボードの入力状態をチェック */
if (typeof keys !== 'undefined') {
const up = keys['ArrowUp'] || keys['KeyW'];
const down = keys['ArrowDown'] || keys['KeyS'];
const left = keys['ArrowLeft'] || keys['KeyA'];
const right = keys['ArrowRight'] || keys['KeyD'];
- /* 【ここが魔改造】 */
- /* 左右が押されておらず、縦だけが押されている時(純粋な縦移動) */
+ /* 左右が押されておらず、縦移動だけのとき */
if (!left && !right) {
if (up) {
- /* 真上(本来は -Math.PI / 2) */
- /* サーバーが1バイト(0〜254)に変換した時に、ピッタリ「63」または「64」になって */
- /* 逆変換(復元)した時にも完全に真上を向く「魔法の角度」に固定します */
- fixedAngle = -1.5587186118408203;
+ /* 1バイト変換した時にピッタリ「63」(真上に一番近い整数)になる魔法の角度 */
+ angle = ((63 / 254) * Math.PI * 2) - Math.PI;
} else if (down) {
- /* 真下(本来は Math.PI / 2) */
- /* 逆変換時にピッタリ真下を向く「魔法の角度」に固定します */
- fixedAngle = 1.5587186118408203;
+ /* 1バイト変換した時にピッタリ「191」(真下に一番近い整数)になる魔法の角度 */
+ angle = ((191 / 254) * Math.PI * 2) - Math.PI;
}
}
}
+
+ /* ゲーム本来の「1バイト圧縮処理」を実行 */
+ let encodedAngle = Math.round(((angle + Math.PI) / (Math.PI * 2)) * 254);
- /* 補正した角度(マウス時はそのまま)で元の送信関数を呼び出す */
- originalSendInput(fixedAngle);
+ /* 1バイトのバイナリデータを作成して送信 */
+ const buffer = new ArrayBuffer(1);
+ const view = new DataView(buffer);
+ view.setUint8(0, encodedAngle);
+ socket.send(buffer);
};
- window._keyboardStraightPatchApplied = true;
- alert('【キーボード直進化パッチ】\n縦移動時の1バイト変換誤差を先読み補正し、完全直進を可能にしました!');
+ alert('【通信軸・完全直進パッチ】\n送信直前のデータを直接補正するようにしました!今度こそ一切ズレません!');
} else {
- alert('エラー: sendInput 関数が見つかりませんでした。ゲーム画面で実行してください。');
+ alert('エラー: sendInput関数が見つかりません。ゲーム画面で実行してください。');
}
})();
/*
* @title キーボード縦移動修正
* @description キーボード縦移動時にちゃんとまっすぐになるぞ!
* @private
*/
javascript:(function(){
/* 1. client-network.js の本当の送信関数を上書き */
if (typeof sendInput === 'function') {
window.sendInput = function() {
if (!socket || socket.readyState !== WebSocket.OPEN) return;
if (!isGameReady || myId === null) return;
/* 基本はゲームが持っている現在の角度を使う */
let angle = inputAngle;
/* キーボードの入力状態をチェック */
if (typeof keys !== 'undefined') {
const up = keys['ArrowUp'] || keys['KeyW'];
const down = keys['ArrowDown'] || keys['KeyS'];
const left = keys['ArrowLeft'] || keys['KeyA'];
const right = keys['ArrowRight'] || keys['KeyD'];
/* 左右が押されておらず、縦移動だけのとき */
if (!left && !right) {
if (up) {
/* 1バイト変換した時にピッタリ「63」(真上に一番近い整数)になる魔法の角度 */
angle = ((63 / 254) * Math.PI * 2) - Math.PI;
} else if (down) {
/* 1バイト変換した時にピッタリ「191」(真下に一番近い整数)になる魔法の角度 */
angle = ((191 / 254) * Math.PI * 2) - Math.PI;
}
}
}
/* ゲーム本来の「1バイト圧縮処理」を実行 */
let encodedAngle = Math.round(((angle + Math.PI) / (Math.PI * 2)) * 254);
/* 1バイトのバイナリデータを作成して送信 */
const buffer = new ArrayBuffer(1);
const view = new DataView(buffer);
view.setUint8(0, encodedAngle);
socket.send(buffer);
};
alert('【通信軸・完全直進パッチ】\n送信直前のデータを直接補正するようにしました!今度こそ一切ズレません!');
} else {
alert('エラー: sendInput関数が見つかりません。ゲーム画面で実行してください。');
}
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。