OLO player

2/10/2025, 4:39:44 PM

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        OLO player
// @namespace   Violentmonkey Scripts
// @match       https://johnbutlergames.com/games/opposite-day**/1-**-0/index.html*
// @grant       none
// @version     1.0
// @author      John Butler, ppougj
// @description 2/10/2025, 4:39:44 PM
// ==/UserScript==

(function() {
    'use strict';

    function modifyPlayerDraw() {
        if (typeof player !== "undefined" && typeof player.draw === "function") {
            console.log("Modifying player draw function...");

            player.draw = function() {
                let ctx = document.getElementById('canvas').getContext('2d');

                var centerX = this.x + this.w / 2;
                var centerY = this.y + this.h / 2;
                var eyeSpacing = 11;
                var eyeSize = 5;
                var pupilSize = 2;
                var pupilMovement = 1;
                var strokeWidth = 2;
                var noseWidth = 7;
                var noseHeight = 10;
                var nosePosition = {x:-2,y:5};

                ctx.lineWidth = strokeWidth;

                ctx.fillStyle = 'white';
                ctx.fillRect(this.x, this.y, this.w, this.h);

                ctx.strokeStyle = 'black';
                ctx.strokeRect(this.x, this.y, this.w, this.h);

                ctx.save();
                ctx.translate(centerX,centerY);
                ctx.fillStyle = 'black';
                ctx.strokeStyle = 'black';

                ctx.beginPath();
                ctx.arc(-eyeSpacing,0,eyeSize,0,2*Math.PI);
                ctx.stroke();
                ctx.beginPath();
                ctx.arc(eyeSpacing,0,eyeSize,0,2*Math.PI);
                ctx.stroke();

                ctx.save();
                ctx.translate(nosePosition.x,nosePosition.y);
                ctx.beginPath();
                ctx.moveTo(0,-noseHeight);
                ctx.lineTo(0,0);
                ctx.lineTo(noseWidth,0);
                ctx.stroke();
                ctx.restore();

                var dir = dirTo(0, 0, this.xmove, this.ymove);
                var speed = distTo(0, 0, this.xmove, this.ymove);
                speed = Math.min(speed, 5) * (eyeSize-strokeWidth)/5*pupilMovement;
                var move = distToMove(speed, dir);
                ctx.beginPath();
                ctx.arc(-eyeSpacing+move.x,move.y,pupilSize,0,2*Math.PI);
                ctx.fill();
                ctx.beginPath();
                ctx.arc(eyeSpacing+move.x,move.y,pupilSize,0,2*Math.PI);
                ctx.fill();

                ctx.restore();
            };
        } else {
            setTimeout(modifyPlayerDraw, 500);
        }
    }

    modifyPlayerDraw();
})();