キーボード縦移動修正
by
cutfloss
06/01 [2026/06/01 00:28:51]
キーボード縦移動時にちゃんとまっすぐになるぞ!
@@ -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 です。