Gobattle.io Noclip and Fly

Enable noclip and flying in Gobattle.io

// ==UserScript==
// @name         Gobattle.io Noclip and Fly
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Enable noclip and flying in Gobattle.io
// @author       Toluwa Oyerinde
// @match        https://gobattle.io/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    let isNoclipEnabled = false; // Noclip state
    let isFlying = false;        // Fly state
    let player;                  // Reference to the player
    let originalPhysics;         // Store original physics properties
    const flySpeed = 5;          // Speed of flying
    const pressedKeys = new Set(); // Use a Set to track pressed keys efficiently

    // --- Core Functions ---

    function init() {
        // Wait for the game to load the player object
        const interval = setInterval(() => {
            if (window.gobattle && window.gobattle.player) {
                player = window.gobattle.player;
                // Store original physics for later use (if possible)
                originalPhysics = player.physicsProperties ? { ...player.physicsProperties } : null;
                console.log("Noclip and Flying initialized.");
                clearInterval(interval);
                gameLoop(); // Start the main game loop
            }
        }, 100);
    }

    function toggleNoclip() {
        isNoclipEnabled = !isNoclipEnabled;

        if (player && originalPhysics) {
            if (isNoclipEnabled) {
                console.log("Noclip enabled.");
                // Try to disable physics properties if they exist
                player.physicsProperties.collision = false;
                player.physicsProperties.gravity = 0;
            } else {
                console.log("Noclip disabled.");
                // Restore original physics properties
                player.physicsProperties = { ...originalPhysics };
            }
        }
    }

    function toggleFly() {
        isFlying = !isFlying;
        console.log(`Flying ${isFlying ? 'enabled' : 'disabled'}.`);
    }

    // --- Game Logic ---

    function handleMovement() {
        if (!isFlying || !player) return;

        const movement = { x: 0, y: 0, z: 0 };

        if (pressedKeys.has('w')) movement.z -= flySpeed;
        if (pressedKeys.has('s')) movement.z += flySpeed;
        if (pressedKeys.has('a')) movement.x -= flySpeed;
        if (pressedKeys.has('d')) movement.x += flySpeed;
        if (pressedKeys.has(' ')) movement.y += flySpeed; // Space
        if (pressedKeys.has('Shift')) movement.y -= flySpeed; // Shift

        // Update player position directly
        player.transform.position.x += movement.x;
        player.transform.position.y += movement.y;
        player.transform.position.z += movement.z;
    }

    // --- Event Handlers ---

    window.addEventListener('keydown', (event) => {
        const key = event.key.toLowerCase();
        if (key === 'f') {
            toggleNoclip();
        } else if (key === 'g') {
            toggleFly();
        }
        pressedKeys.add(key);
    });

    window.addEventListener('keyup', (event) => {
        pressedKeys.delete(event.key.toLowerCase());
    });

    // --- Main Loop ---

    function gameLoop() {
        handleMovement(); // Handle movement every frame
        requestAnimationFrame(gameLoop);
    }

    // --- Script Initialization ---

    init();
})();