非公開 画面90度回転

    @@ -4,31 +4,48 @@ * @private */ javascript:(function(){ - const container = document.getElementById('game-container'); const canvas = document.getElementById('gameCanvas'); - if(!container || !canvas) return; + if(!canvas) return alert('ゲーム画面が見つかりません'); - /* 1. コンテナを全画面 FlexBox 化(これで絶対にど真ん中へ) */ - Object.assign(container.style, { - position: 'fixed', top: '0', left: '0', width: '100vw', height: '100vh', - zIndex: '9999', backgroundColor: '#000', maxWidth: 'none', maxHeight: 'none', - display: 'flex', alignItems: 'center', justifyContent: 'center', overflow: 'hidden' - }); - - /* 2. キャンバスのサイズと回転の設定 */ - /* 画面の短い方の辺に合わせて、はみ出さない最大倍率を計算 */ - const scale = Math.min(window.innerWidth / canvas.height, window.innerHeight / canvas.width) * 0.95; + /* 1. 見た目だけを90度回転(比率を維持) */ + /* rotate(90deg) だけだと画面からはみ出す場合があるため、 + 現在の親要素に収まるように自動スケール調整します */ + const parent = canvas.parentElement; + const scale = Math.min(parent.clientWidth / canvas.height, parent.clientHeight / canvas.width); canvas.style.transformOrigin = 'center center'; canvas.style.transform = `rotate(90deg) scale(${scale})`; - canvas.style.position = 'static'; /* Flexboxで制御するため */ + canvas.style.transition = 'transform 0.3s ease'; /* 滑らかに回転 */ + + /* 2. 操作方向の補正(脳内変換不要モード) */ + /* 画面が右に90度倒れているので、 + 見た目上の「右(実際は下)」を「データ上の右」に変換します */ + if (typeof sendInput === 'function' && !window._inputHooked) { + window._inputHooked = true; + const _origSendInput = window.sendInput; + window.sendInput = function() { + const dx = inputState.dx; + const dy = inputState.dy; - /* 3. 名前と絵文字の「首折れ」防止フック(安全版) */ + /* 90度回転時のベクトル変換式 */ + /* 見た目の右(X+) -> データの下(Y+) + 見た目の上(Y-) -> データの右(X+) */ + inputState.dx = -dy; + inputState.dy = dx; + + _origSendInput.apply(this, arguments); + + /* 他の描画ロジックに影響を与えないよう戻す */ + inputState.dx = dx; + inputState.dy = dy; + }; + } + + /* 3. 名前と絵文字の水平維持(首折れ防止) */ if (!window._originalFillText) { window._originalFillText = CanvasRenderingContext2D.prototype.fillText; CanvasRenderingContext2D.prototype.fillText = function(text, x, y, maxWidth) { - /* プレイヤー名や絵文字の描画位置(中心付近)を狙い撃ち */ - /* スコアの % やタイマーの : は除外 */ + /* プレイヤー周辺のテキスト(translate後)のみ回転を打ち消す */ if (Math.abs(x) < 40 && Math.abs(y) < 40 && !text.includes('%') && !text.includes(':')) { this.save(); this.rotate(-Math.PI / 2); @@ -40,24 +57,5 @@ }; } - /* 4. 操作方向の90度回転補正(右が下、上が右) */ - if (typeof sendInput === 'function' && !window._inputHooked) { - window._inputHooked = true; - const _origSendInput = window.sendInput; - window.sendInput = function() { - const dx = inputState.dx; - const dy = inputState.dy; - inputState.dx = -dy; - inputState.dy = dx; - _origSendInput.apply(this, arguments); - inputState.dx = dx; - inputState.dy = dy; - }; - } - - /* 5. ゲーム側の強制リサイズ(resize関数)を無効化して暴走を止める */ - window.removeEventListener('resize', window.resize); - - document.body.style.overflow = 'hidden'; - alert('【究極・横画面パッチ】\n・ど真ん中配置完了!\n・名前の向きを水平に固定\n・スペースキーでブースト可能'); + alert('【比率維持・横画面】適用しました!\n操作方向も画面に合わせて補正済みです。'); })();
  • /*
     * @title 画面90度回転
     * @description ゲーム画面を90度回転させるぞ 配信とかでも見えやすくなるはずだっ
     * @private
     */
    javascript:(function(){
        const canvas = document.getElementById('gameCanvas');
        if(!canvas) return alert('ゲーム画面が見つかりません');
    
        /* 1. 見た目だけを90度回転(比率を維持) */
        /* rotate(90deg) だけだと画面からはみ出す場合があるため、
           現在の親要素に収まるように自動スケール調整します */
        const parent = canvas.parentElement;
        const scale = Math.min(parent.clientWidth / canvas.height, parent.clientHeight / canvas.width);
        
        canvas.style.transformOrigin = 'center center';
        canvas.style.transform = `rotate(90deg) scale(${scale})`;
        canvas.style.transition = 'transform 0.3s ease'; /* 滑らかに回転 */
    
        /* 2. 操作方向の補正(脳内変換不要モード) */
        /* 画面が右に90度倒れているので、
           見た目上の「右(実際は下)」を「データ上の右」に変換します */
        if (typeof sendInput === 'function' && !window._inputHooked) {
            window._inputHooked = true;
            const _origSendInput = window.sendInput;
            window.sendInput = function() {
                const dx = inputState.dx;
                const dy = inputState.dy;
    
                /* 90度回転時のベクトル変換式 */
                /* 見た目の右(X+) -> データの下(Y+)
                   見た目の上(Y-) -> データの右(X+) */
                inputState.dx = -dy; 
                inputState.dy = dx;
    
                _origSendInput.apply(this, arguments);
    
                /* 他の描画ロジックに影響を与えないよう戻す */
                inputState.dx = dx;
                inputState.dy = dy;
            };
        }
    
        /* 3. 名前と絵文字の水平維持(首折れ防止) */
        if (!window._originalFillText) {
            window._originalFillText = CanvasRenderingContext2D.prototype.fillText;
            CanvasRenderingContext2D.prototype.fillText = function(text, x, y, maxWidth) {
                /* プレイヤー周辺のテキスト(translate後)のみ回転を打ち消す */
                if (Math.abs(x) < 40 && Math.abs(y) < 40 && !text.includes('%') && !text.includes(':')) {
                    this.save();
                    this.rotate(-Math.PI / 2);
                    window._originalFillText.call(this, text, -y, x, maxWidth);
                    this.restore();
                } else {
                    window._originalFillText.apply(this, arguments);
                }
            };
        }
    
        alert('【比率維持・横画面】適用しました!\n操作方向も画面に合わせて補正済みです。');
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2026/05/07 21:37:28 - 4 hours ago
  2. 2026/05/07 21:36:45 - 4 hours ago
  3. 2026/05/07 21:35:51 - 4 hours ago
  4. 2026/05/07 21:33:04 - 4 hours ago
  5. 2026/05/07 21:32:51 - 4 hours ago
  6. 2026/05/07 21:32:34 - 4 hours ago
  7. 2026/05/07 21:31:47 - 4 hours ago
  8. 2026/05/07 21:30:08 - 4 hours ago
  9. 2026/05/07 21:29:42 - 4 hours ago
  10. 2026/05/07 21:29:00 - 4 hours ago
  11. 2026/05/07 21:28:35 - 4 hours ago
  12. 2026/05/07 21:28:13 - 4 hours ago
  13. 2026/05/07 21:27:47 - 4 hours ago
  14. 2026/05/07 21:26:34 - 4 hours ago
  15. 2026/05/07 21:25:12 - 4 hours ago
  16. 2026/05/07 21:24:27 - 4 hours ago
  17. 2026/05/07 21:23:48 - 4 hours ago
  18. 2026/05/07 21:19:16 - 4 hours ago
  19. 2026/05/07 21:18:28 - 4 hours ago
  20. 2026/05/07 21:18:05 - 4 hours ago
  21. 2026/05/07 21:16:56 - 4 hours ago
  22. 2026/05/07 21:15:57 - 4 hours ago
  23. 2026/05/07 21:13:29 - 4 hours ago
  24. 2026/05/07 21:12:09 - 4 hours ago
  25. 2026/05/07 21:11:27 - 4 hours ago
  26. 2026/05/07 21:10:51 - 4 hours ago
  27. 2026/05/07 21:10:17 - 4 hours ago
  28. 2026/05/07 21:09:44 - 4 hours ago
  29. 2026/05/07 21:06:24 - 4 hours ago
  30. 2026/05/07 21:04:49 - 4 hours ago
  31. 2026/05/07 20:58:38 - 4 hours ago
  32. 2026/05/07 20:55:41 - 5 hours ago
  33. 2026/05/07 20:44:19 - 5 hours ago
  34. 2026/05/07 20:33:33 - 5 hours ago
  35. 2026/05/07 20:27:57 - 5 hours ago
  36. 2026/05/07 20:21:47 - 5 hours ago
  37. 2026/05/07 20:15:17 - 5 hours ago
  38. 2026/05/07 20:07:46 - 5 hours ago
  39. 2026/05/07 19:45:31 - 6 hours ago
  40. 2026/05/07 19:36:35 - 6 hours ago
  41. 2026/05/07 19:32:05 - 6 hours ago
  42. 2026/05/07 19:30:04 - 6 hours ago
  43. 2026/05/07 19:22:33 - 6 hours ago
  44. 2026/05/07 14:18:43 - 11 hours ago