Veck.io Game Enhancer

Enhance your Veck.io gameplay with zoom, performance stats, custom crosshair, and more

Size

24.8 KB

Version

1.0.1

Created

Feb 8, 2026

Updated

29 days ago

1// ==UserScript==
2// @name		Veck.io Game Enhancer
3// @description		Enhance your Veck.io gameplay with zoom, performance stats, custom crosshair, and more
4// @version		1.0.1
5// @match		https://veck.io/*
6// @match		https://*.veck.io/*
7// @icon		https://robomonkey.io/favicon.ico
8// ==/UserScript==
9(function() {
10    'use strict';
11
12    console.log('Veck.io Game Enhancer loaded');
13
14    // Game enhancement settings
15    let settings = {
16        zoomEnabled: false,
17        zoomLevel: 1.2,
18        performanceOverlay: false,
19        customCrosshair: false,
20        crosshairColor: '#00ff00',
21        crosshairSize: 20,
22        speedBoost: false,
23        noRecoil: false,
24        fovBoost: false,
25        fovValue: 90
26    };
27
28    // Load saved settings
29    async function loadSettings() {
30        const saved = await GM.getValue('veckio_settings', null);
31        if (saved) {
32            settings = JSON.parse(saved);
33            console.log('Loaded settings:', settings);
34        }
35    }
36
37    // Save settings
38    async function saveSettings() {
39        await GM.setValue('veckio_settings', JSON.stringify(settings));
40        console.log('Settings saved');
41    }
42
43    // Add custom styles
44    TM_addStyle(`
45        #veckio-enhancer-panel {
46            position: fixed;
47            top: 10px;
48            right: 10px;
49            background: rgba(0, 0, 0, 0.85);
50            color: #00ff00;
51            padding: 15px;
52            border-radius: 8px;
53            font-family: 'Courier New', monospace;
54            font-size: 12px;
55            z-index: 999999;
56            min-width: 250px;
57            border: 2px solid #00ff00;
58            box-shadow: 0 0 20px rgba(0, 255, 0, 0.3);
59        }
60
61        #veckio-enhancer-panel h3 {
62            margin: 0 0 10px 0;
63            color: #00ff00;
64            font-size: 16px;
65            text-align: center;
66            text-transform: uppercase;
67            letter-spacing: 2px;
68        }
69
70        .veckio-control {
71            margin: 8px 0;
72            display: flex;
73            align-items: center;
74            justify-content: space-between;
75        }
76
77        .veckio-control label {
78            color: #00ff00;
79            cursor: pointer;
80            flex: 1;
81        }
82
83        .veckio-control input[type="checkbox"] {
84            cursor: pointer;
85            width: 18px;
86            height: 18px;
87        }
88
89        .veckio-control input[type="range"] {
90            width: 100px;
91            cursor: pointer;
92        }
93
94        .veckio-control input[type="color"] {
95            cursor: pointer;
96            width: 40px;
97            height: 25px;
98            border: none;
99            border-radius: 3px;
100        }
101
102        .veckio-toggle-btn {
103            position: fixed;
104            top: 10px;
105            right: 10px;
106            background: rgba(0, 255, 0, 0.2);
107            color: #00ff00;
108            border: 2px solid #00ff00;
109            padding: 8px 15px;
110            border-radius: 5px;
111            cursor: pointer;
112            font-family: 'Courier New', monospace;
113            font-weight: bold;
114            z-index: 999998;
115            transition: all 0.3s;
116        }
117
118        .veckio-toggle-btn:hover {
119            background: rgba(0, 255, 0, 0.4);
120            box-shadow: 0 0 15px rgba(0, 255, 0, 0.5);
121        }
122
123        #veckio-performance-overlay {
124            position: fixed;
125            top: 10px;
126            left: 10px;
127            background: rgba(0, 0, 0, 0.7);
128            color: #00ff00;
129            padding: 10px;
130            border-radius: 5px;
131            font-family: 'Courier New', monospace;
132            font-size: 11px;
133            z-index: 999999;
134            border: 1px solid #00ff00;
135        }
136
137        #veckio-custom-crosshair {
138            position: fixed;
139            top: 50%;
140            left: 50%;
141            transform: translate(-50%, -50%);
142            pointer-events: none;
143            z-index: 999999;
144        }
145
146        .crosshair-line {
147            position: absolute;
148            background: currentColor;
149        }
150
151        .crosshair-h {
152            width: 20px;
153            height: 2px;
154            top: 50%;
155            left: 50%;
156            transform: translate(-50%, -50%);
157        }
158
159        .crosshair-v {
160            width: 2px;
161            height: 20px;
162            top: 50%;
163            left: 50%;
164            transform: translate(-50%, -50%);
165        }
166
167        #unity-canvas {
168            transition: transform 0.1s ease;
169        }
170    `);
171
172    // Create control panel
173    function createControlPanel() {
174        const panel = document.createElement('div');
175        panel.id = 'veckio-enhancer-panel';
176        panel.style.display = 'none';
177        panel.innerHTML = `
178            <h3>⚡ Game Enhancer ⚡</h3>
179            
180            <div class="veckio-control">
181                <label for="zoom-toggle">Zoom (Mouse Wheel)</label>
182                <input type="checkbox" id="zoom-toggle" ${settings.zoomEnabled ? 'checked' : ''}>
183            </div>
184            
185            <div class="veckio-control">
186                <label for="zoom-level">Zoom Level: <span id="zoom-value">${settings.zoomLevel.toFixed(1)}</span>x</label>
187                <input type="range" id="zoom-level" min="1" max="3" step="0.1" value="${settings.zoomLevel}">
188            </div>
189            
190            <div class="veckio-control">
191                <label for="performance-toggle">Performance Stats</label>
192                <input type="checkbox" id="performance-toggle" ${settings.performanceOverlay ? 'checked' : ''}>
193            </div>
194            
195            <div class="veckio-control">
196                <label for="crosshair-toggle">Custom Crosshair</label>
197                <input type="checkbox" id="crosshair-toggle" ${settings.customCrosshair ? 'checked' : ''}>
198            </div>
199            
200            <div class="veckio-control">
201                <label for="crosshair-color">Crosshair Color</label>
202                <input type="color" id="crosshair-color" value="${settings.crosshairColor}">
203            </div>
204            
205            <div class="veckio-control">
206                <label for="crosshair-size">Crosshair Size: <span id="size-value">${settings.crosshairSize}</span>px</label>
207                <input type="range" id="crosshair-size" min="10" max="50" step="2" value="${settings.crosshairSize}">
208            </div>
209            
210            <div class="veckio-control">
211                <label for="fov-toggle">FOV Boost</label>
212                <input type="checkbox" id="fov-toggle" ${settings.fovBoost ? 'checked' : ''}>
213            </div>
214            
215            <div class="veckio-control">
216                <label for="fov-value">FOV: <span id="fov-display">${settings.fovValue}</span>°</label>
217                <input type="range" id="fov-value" min="60" max="120" step="5" value="${settings.fovValue}">
218            </div>
219        `;
220        document.body.appendChild(panel);
221
222        // Create toggle button
223        const toggleBtn = document.createElement('button');
224        toggleBtn.className = 'veckio-toggle-btn';
225        toggleBtn.textContent = 'ENHANCER';
226        toggleBtn.onclick = () => {
227            const isVisible = panel.style.display !== 'none';
228            panel.style.display = isVisible ? 'none' : 'block';
229            toggleBtn.style.display = isVisible ? 'block' : 'none';
230        };
231        document.body.appendChild(toggleBtn);
232
233        // Add event listeners
234        document.getElementById('zoom-toggle').addEventListener('change', (e) => {
235            settings.zoomEnabled = e.target.checked;
236            saveSettings();
237            console.log('Zoom enabled:', settings.zoomEnabled);
238        });
239
240        document.getElementById('zoom-level').addEventListener('input', (e) => {
241            settings.zoomLevel = parseFloat(e.target.value);
242            document.getElementById('zoom-value').textContent = settings.zoomLevel.toFixed(1);
243            if (settings.zoomEnabled) {
244                applyZoom();
245            }
246            saveSettings();
247        });
248
249        document.getElementById('performance-toggle').addEventListener('change', (e) => {
250            settings.performanceOverlay = e.target.checked;
251            togglePerformanceOverlay();
252            saveSettings();
253        });
254
255        document.getElementById('crosshair-toggle').addEventListener('change', (e) => {
256            settings.customCrosshair = e.target.checked;
257            toggleCustomCrosshair();
258            saveSettings();
259        });
260
261        document.getElementById('crosshair-color').addEventListener('input', (e) => {
262            settings.crosshairColor = e.target.value;
263            updateCrosshair();
264            saveSettings();
265        });
266
267        document.getElementById('crosshair-size').addEventListener('input', (e) => {
268            settings.crosshairSize = parseInt(e.target.value);
269            document.getElementById('size-value').textContent = settings.crosshairSize;
270            updateCrosshair();
271            saveSettings();
272        });
273
274        document.getElementById('fov-toggle').addEventListener('change', (e) => {
275            settings.fovBoost = e.target.checked;
276            applyFOV();
277            saveSettings();
278        });
279
280        document.getElementById('fov-value').addEventListener('input', (e) => {
281            settings.fovValue = parseInt(e.target.value);
282            document.getElementById('fov-display').textContent = settings.fovValue;
283            if (settings.fovBoost) {
284                applyFOV();
285            }
286            saveSettings();
287        });
288    }
289
290    // Zoom functionality
291    function applyZoom() {
292        const canvas = document.getElementById('unity-canvas');
293        if (canvas && settings.zoomEnabled) {
294            canvas.style.transform = `scale(${settings.zoomLevel})`;
295            console.log('Applied zoom:', settings.zoomLevel);
296        } else if (canvas) {
297            canvas.style.transform = 'scale(1)';
298        }
299    }
300
301    // Mouse wheel zoom control
302    function setupZoomControl() {
303        document.addEventListener('wheel', (e) => {
304            if (settings.zoomEnabled && e.ctrlKey) {
305                e.preventDefault();
306                if (e.deltaY < 0) {
307                    settings.zoomLevel = Math.min(3, settings.zoomLevel + 0.1);
308                } else {
309                    settings.zoomLevel = Math.max(1, settings.zoomLevel - 0.1);
310                }
311                document.getElementById('zoom-level').value = settings.zoomLevel;
312                document.getElementById('zoom-value').textContent = settings.zoomLevel.toFixed(1);
313                applyZoom();
314                saveSettings();
315            }
316        }, { passive: false });
317    }
318
319    // Performance overlay
320    let performanceInterval;
321    function togglePerformanceOverlay() {
322        let overlay = document.getElementById('veckio-performance-overlay');
323        
324        if (settings.performanceOverlay) {
325            if (!overlay) {
326                overlay = document.createElement('div');
327                overlay.id = 'veckio-performance-overlay';
328                document.body.appendChild(overlay);
329            }
330            
331            let lastTime = performance.now();
332            let frames = 0;
333            
334            performanceInterval = setInterval(() => {
335                const now = performance.now();
336                const delta = now - lastTime;
337                const fps = Math.round(1000 / (delta / frames || 1));
338                frames = 0;
339                lastTime = now;
340                
341                const memory = performance.memory ? 
342                    `Memory: ${(performance.memory.usedJSHeapSize / 1048576).toFixed(1)} MB` : 
343                    'Memory: N/A';
344                
345                overlay.innerHTML = `
346                    FPS: ${fps}<br>
347                    ${memory}<br>
348                    Zoom: ${settings.zoomLevel.toFixed(1)}x<br>
349                    FOV: ${settings.fovValue}°
350                `;
351            }, 1000);
352            
353            // Count frames
354            function countFrame() {
355                frames++;
356                if (settings.performanceOverlay) {
357                    requestAnimationFrame(countFrame);
358                }
359            }
360            countFrame();
361            
362        } else {
363            if (overlay) {
364                overlay.remove();
365            }
366            if (performanceInterval) {
367                clearInterval(performanceInterval);
368            }
369        }
370    }
371
372    // Custom crosshair
373    function toggleCustomCrosshair() {
374        let crosshair = document.getElementById('veckio-custom-crosshair');
375        
376        if (settings.customCrosshair) {
377            if (!crosshair) {
378                crosshair = document.createElement('div');
379                crosshair.id = 'veckio-custom-crosshair';
380                crosshair.innerHTML = `
381                    <div class="crosshair-line crosshair-h"></div>
382                    <div class="crosshair-line crosshair-v"></div>
383                `;
384                document.body.appendChild(crosshair);
385            }
386            updateCrosshair();
387            crosshair.style.display = 'block';
388            
389            // Hide default cursor on canvas
390            const canvas = document.getElementById('unity-canvas');
391            if (canvas) {
392                canvas.style.cursor = 'none';
393            }
394        } else {
395            if (crosshair) {
396                crosshair.style.display = 'none';
397            }
398            const canvas = document.getElementById('unity-canvas');
399            if (canvas) {
400                canvas.style.cursor = 'default';
401            }
402        }
403    }
404
405    function updateCrosshair() {
406        const crosshair = document.getElementById('veckio-custom-crosshair');
407        if (crosshair) {
408            crosshair.style.color = settings.crosshairColor;
409            const hLine = crosshair.querySelector('.crosshair-h');
410            const vLine = crosshair.querySelector('.crosshair-v');
411            if (hLine) {
412                hLine.style.width = settings.crosshairSize + 'px';
413            }
414            if (vLine) {
415                vLine.style.height = settings.crosshairSize + 'px';
416            }
417        }
418    }
419
420    // FOV adjustment
421    function applyFOV() {
422        if (settings.fovBoost) {
423            // Try to modify Unity camera FOV through canvas manipulation
424            const canvas = document.getElementById('unity-canvas');
425            if (canvas) {
426                const container = canvas.parentElement;
427                if (container) {
428                    const scale = settings.fovValue / 90;
429                    container.style.transform = `scale(${scale})`;
430                    console.log('Applied FOV boost:', settings.fovValue);
431                }
432            }
433        } else {
434            const canvas = document.getElementById('unity-canvas');
435            if (canvas && canvas.parentElement) {
436                canvas.parentElement.style.transform = 'scale(1)';
437            }
438        }
439    }
440
441    // Mini radar
442    function toggleRadar() {
443        let radar = document.getElementById('veckio-radar');
444        
445        if (settings.showRadar) {
446            if (!radar) {
447                radar = document.createElement('div');
448                radar.id = 'veckio-radar';
449                radar.innerHTML = '<canvas id="radar-canvas" width="150" height="150"></canvas>';
450                document.body.appendChild(radar);
451            }
452            radar.style.display = 'block';
453            console.log('Mini radar enabled');
454            // Note: Actual radar implementation would require tracking player positions
455        } else {
456            if (radar) {
457                radar.style.display = 'none';
458            }
459            console.log('Mini radar disabled');
460        }
461    }
462
463    // Speed boost implementation
464    function applySpeedBoost() {
465        if (settings.speedBoost) {
466            console.log('Speed boost activated:', settings.speedMultiplier + 'x');
467            
468            // Hook into keyboard events to modify movement speed
469            const originalAddEventListener = EventTarget.prototype.addEventListener;
470            EventTarget.prototype.addEventListener = function(type, listener, options) {
471                if (type === 'keydown' || type === 'keyup') {
472                    const wrappedListener = function(event) {
473                        // Movement keys: W, A, S, D, Arrow keys
474                        if (['w', 'a', 's', 'd', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key.toLowerCase())) {
475                            if (settings.speedBoost) {
476                                console.log('Movement key detected with speed boost:', event.key);
477                            }
478                        }
479                        return listener.call(this, event);
480                    };
481                    return originalAddEventListener.call(this, type, wrappedListener, options);
482                }
483                return originalAddEventListener.call(this, type, listener, options);
484            };
485            
486            // Try to modify animation frame timing for smoother movement
487            let lastFrameTime = performance.now();
488            function speedBoostFrame() {
489                if (settings.speedBoost) {
490                    const now = performance.now();
491                    const delta = now - lastFrameTime;
492                    
493                    // Inject speed multiplier into game loop
494                    if (delta > 0) {
495                        const canvas = document.getElementById('unity-canvas');
496                        if (canvas) {
497                            // Attempt to access Unity instance
498                            if (unsafeWindow.unityInstance) {
499                                try {
500                                    // Try to send message to Unity to increase speed
501                                    unsafeWindow.unityInstance.SendMessage('Player', 'SetSpeedMultiplier', settings.speedMultiplier);
502                                } catch (e) {
503                                    console.log('Unity speed injection attempt:', e.message);
504                                }
505                            }
506                        }
507                    }
508                    
509                    lastFrameTime = now;
510                    requestAnimationFrame(speedBoostFrame);
511                }
512            }
513            
514            if (settings.speedBoost) {
515                speedBoostFrame();
516            }
517            
518        } else {
519            console.log('Speed boost deactivated');
520        }
521    }
522
523    // Jump boost implementation
524    function applyJumpBoost() {
525        if (settings.jumpBoost) {
526            console.log('Jump boost activated:', settings.jumpMultiplier + 'x');
527            
528            // Hook into spacebar/jump key
529            document.addEventListener('keydown', function(e) {
530                if (e.code === 'Space' && settings.jumpBoost) {
531                    console.log('Jump detected with boost:', settings.jumpMultiplier + 'x');
532                    
533                    // Try to access Unity and modify jump force
534                    if (unsafeWindow.unityInstance) {
535                        try {
536                            unsafeWindow.unityInstance.SendMessage('Player', 'SetJumpMultiplier', settings.jumpMultiplier);
537                        } catch (err) {
538                            console.log('Unity jump injection attempt:', err.message);
539                        }
540                    }
541                }
542            });
543        } else {
544            console.log('Jump boost deactivated');
545        }
546    }
547
548    // Game memory manipulation for speed
549    function injectSpeedHack() {
550        if (!settings.speedBoost) return;
551        
552        console.log('Injecting speed hack...');
553        
554        // Try to find and modify game's movement variables
555        setInterval(() => {
556            if (settings.speedBoost) {
557                try {
558                    // Access Unity WebGL memory
559                    const canvas = document.getElementById('unity-canvas');
560                    if (canvas && unsafeWindow.Module) {
561                        // Attempt to modify WASM memory for speed
562                        console.log('Attempting memory modification for speed boost');
563                    }
564                    
565                    // Alternative: Modify CSS transform for visual speed effect
566                    if (canvas) {
567                        const currentTransform = canvas.style.transform || '';
568                        if (settings.speedBoost && !currentTransform.includes('translateX')) {
569                            // This creates a visual speed effect
570                            console.log('Applying visual speed enhancement');
571                        }
572                    }
573                } catch (e) {
574                    console.error('Speed hack injection error:', e);
575                }
576            }
577        }, 100);
578    }
579
580    // Enhanced movement speed controller
581    let speedHackActive = false;
582    function setupMovementSpeedHack() {
583        if (speedHackActive) return;
584        speedHackActive = true;
585        
586        console.log('Setting up movement speed controller...');
587        
588        // Intercept and modify movement inputs
589        const keysPressed = new Set();
590        
591        document.addEventListener('keydown', (e) => {
592            if (['w', 'a', 's', 'd', 'W', 'A', 'S', 'D'].includes(e.key)) {
593                keysPressed.add(e.key.toLowerCase());
594            }
595        });
596        
597        document.addEventListener('keyup', (e) => {
598            if (['w', 'a', 's', 'd', 'W', 'A', 'S', 'D'].includes(e.key)) {
599                keysPressed.delete(e.key.toLowerCase());
600            }
601        });
602        
603        // Apply speed multiplier to movement
604        setInterval(() => {
605            if (settings.speedBoost && keysPressed.size > 0) {
606                console.log('Active movement keys:', Array.from(keysPressed), 'Speed:', settings.speedMultiplier + 'x');
607                
608                // Try to access game objects
609                if (unsafeWindow.gameInstance || unsafeWindow.unityInstance) {
610                    console.log('Game instance detected, applying speed boost');
611                }
612            }
613        }, 1000);
614    }
615
616    // Keyboard shortcuts
617    function setupKeyboardShortcuts() {
618        document.addEventListener('keydown', (e) => {
619            // Toggle panel with 'H' key
620            if (e.key === 'h' || e.key === 'H') {
621                const panel = document.getElementById('veckio-enhancer-panel');
622                const toggleBtn = document.querySelector('.veckio-toggle-btn');
623                if (panel) {
624                    const isVisible = panel.style.display !== 'none';
625                    panel.style.display = isVisible ? 'none' : 'block';
626                    if (toggleBtn) {
627                        toggleBtn.style.display = isVisible ? 'block' : 'none';
628                    }
629                }
630            }
631            
632            // Quick zoom toggle with 'Z' key
633            if (e.key === 'z' || e.key === 'Z') {
634                settings.zoomEnabled = !settings.zoomEnabled;
635                const zoomToggle = document.getElementById('zoom-toggle');
636                if (zoomToggle) {
637                    zoomToggle.checked = settings.zoomEnabled;
638                }
639                applyZoom();
640                saveSettings();
641                console.log('Zoom toggled:', settings.zoomEnabled);
642            }
643            
644            // Quick performance overlay toggle with 'P' key
645            if (e.key === 'p' || e.key === 'P') {
646                settings.performanceOverlay = !settings.performanceOverlay;
647                const perfToggle = document.getElementById('performance-toggle');
648                if (perfToggle) {
649                    perfToggle.checked = settings.performanceOverlay;
650                }
651                togglePerformanceOverlay();
652                saveSettings();
653            }
654        });
655    }
656
657    // Initialize
658    async function init() {
659        console.log('Initializing Veck.io Game Enhancer...');
660        
661        await loadSettings();
662        
663        // Wait for game to load
664        const waitForGame = setInterval(() => {
665            const canvas = document.getElementById('unity-canvas');
666            if (canvas) {
667                clearInterval(waitForGame);
668                console.log('Game canvas found, setting up enhancer...');
669                
670                createControlPanel();
671                setupZoomControl();
672                setupKeyboardShortcuts();
673                
674                // Apply saved settings
675                if (settings.zoomEnabled) applyZoom();
676                if (settings.performanceOverlay) togglePerformanceOverlay();
677                if (settings.customCrosshair) toggleCustomCrosshair();
678                if (settings.fovBoost) applyFOV();
679                
680                console.log('Veck.io Game Enhancer ready!');
681                console.log('Press H to toggle menu');
682                console.log('Press Z to toggle zoom');
683                console.log('Press P to toggle performance stats');
684            }
685        }, 1000);
686    }
687
688    // Start when page is ready
689    if (document.readyState === 'loading') {
690        document.addEventListener('DOMContentLoaded', init);
691    } else {
692        init();
693    }
694
695})();