// ==UserScript==
// @name Wormax.io Smooth Movement Fix
// @namespace http://tampermonkey.net/
// @version 1.0.0
// @description Lag Fix for Wormax.IO
// @author AdamStorme
// @match *://wormax.io/*
// @match *://*.wormax.io/*
// @grant none
// @run-at document-start
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// GWT-style obfuscated variables
var cggl$smoothFix = {};
var cbgm$interpolation = {};
var nesg$frameStabilizer = {};
var cgguc$performance = {};
var ji2$config = {};
var jl$utils = {};
// Obfuscated configuration object
ji2$config.smoothConfig = {
a: true, // interpolationEnabled
b: 60, // frameRateTarget
c: 0.8, // smoothingFactor
d: true, // lagCompensation
e: true, // predictionEnabled
f: 100, // maxPredictionTime
g: false // debugMode
};
// Obfuscated performance variables
var frameCount_0 = 0;
var lastTimeStamp_0 = 0;
var deltaTimeHistory_0 = [];
var avgDeltaTime_0 = 16.67;
// GWT-style function definitions
cggl$smoothFix.$clinit_SmoothMovement = function $clinit_SmoothMovement(){
cggl$smoothFix.$clinit_SmoothMovement = function(){};
console.log('[SMF] $clinit_SmoothMovement initialized');
};
cbgm$interpolation.$init_interpolationSystem = function $init_interpolationSystem(){
this.positions_0 = new Map();
this.velocities_0 = new Map();
};
cbgm$interpolation.updatePosition_0 = function updatePosition_0(entityId_0, newPos_0, timestamp_0){
if (!this.positions_0.has(entityId_0)) {
this.positions_0.set(entityId_0, {
current_0: {x_0: newPos_0.x_0, y_0: newPos_0.y_0},
target_0: {x_0: newPos_0.x_0, y_0: newPos_0.y_0},
lastUpdate_0: timestamp_0
});
return;
}
var posData_0 = this.positions_0.get(entityId_0);
posData_0.current_0 = {x_0: posData_0.target_0.x_0, y_0: posData_0.target_0.y_0};
posData_0.target_0 = {x_0: newPos_0.x_0, y_0: newPos_0.y_0};
posData_0.lastUpdate_0 = timestamp_0;
};
cbgm$interpolation.interpolate_0 = function interpolate_0(entityId_0, currentTime_0){
var posData_0 = this.positions_0.get(entityId_0);
if (!posData_0) return null;
var timeDiff_0 = currentTime_0 - posData_0.lastUpdate_0;
var factor_0 = Math.min(timeDiff_0 / avgDeltaTime_0, 1) * ji2$config.smoothConfig.c;
return {
x_0: posData_0.current_0.x_0 + (posData_0.target_0.x_0 - posData_0.current_0.x_0) * factor_0,
y_0: posData_0.current_0.y_0 + (posData_0.target_0.y_0 - posData_0.current_0.y_0) * factor_0
};
};
nesg$frameStabilizer.$init_frameStabilizer = function $init_frameStabilizer(){
this.lastTime_0 = 0;
this.frameInterval_0 = 1000 / ji2$config.smoothConfig.b;
};
nesg$frameStabilizer.shouldRender_0 = function shouldRender_0(currentTime_0){
if (currentTime_0 - this.lastTime_0 >= this.frameInterval_0) {
this.lastTime_0 = currentTime_0;
return true;
}
return false;
};
// Obfuscated RAF hook
jl$utils.hookRequestAnimationFrame_0 = function hookRequestAnimationFrame_0(){
var originalRAF_0 = window.requestAnimationFrame;
window.requestAnimationFrame = function(callback_0) {
return originalRAF_0.call(this, function(timestamp_0) {
var deltaTime_0 = timestamp_0 - lastTimeStamp_0;
lastTimeStamp_0 = timestamp_0;
deltaTimeHistory_0.push(deltaTime_0);
if (deltaTimeHistory_0.length > 10) {
deltaTimeHistory_0.shift();
}
avgDeltaTime_0 = deltaTimeHistory_0.reduce(function(a, b) { return a + b; }, 0) / deltaTimeHistory_0.length;
if (nesg$frameStabilizer.shouldRender_0(timestamp_0)) {
frameCount_0++;
callback_0(timestamp_0);
}
});
};
};
// Obfuscated canvas enhancement
cgguc$performance.enhanceCanvasRendering_0 = function enhanceCanvasRendering_0(){
var canvas_0 = document.querySelector('canvas');
if (!canvas_0) {
setTimeout(cgguc$performance.enhanceCanvasRendering_0, 100);
return;
}
var ctx_0 = canvas_0.getContext('2d');
if (!ctx_0) return;
ctx_0.imageSmoothingEnabled = true;
if (ctx_0.imageSmoothingQuality) {
ctx_0.imageSmoothingQuality = 'high';
}
// Hook clearRect for motion blur effect
var originalClearRect_0 = ctx_0.clearRect;
ctx_0.clearRect = function() {
ctx_0.globalAlpha = 0.95;
ctx_0.fillStyle = 'rgba(0,0,0,0.05)';
ctx_0.fillRect(0, 0, canvas_0.width, canvas_0.height);
ctx_0.globalAlpha = 1.0;
return originalClearRect_0.apply(this, arguments);
};
console.log('[SMF] Canvas rendering enhanced');
};
// Obfuscated movement prediction
cggl$smoothFix.movementPredictor_0 = {
predictions_0: new Map(),
predict_0: function(entityId_0, position_0, velocity_0, deltaTime_0) {
if (!ji2$config.smoothConfig.e) return position_0;
var prediction_0 = {
x_0: position_0.x_0 + velocity_0.x_0 * deltaTime_0,
y_0: position_0.y_0 + velocity_0.y_0 * deltaTime_0
};
this.predictions_0.set(entityId_0, prediction_0);
return prediction_0;
},
getPrediction_0: function(entityId_0) {
return this.predictions_0.get(entityId_0);
}
};
// Obfuscated performance monitor
cgguc$performance.performanceMonitor_0 = {
start_0: function() {
setInterval(function() {
if (ji2$config.smoothConfig.g) {
console.log('[SMF] FPS: ' + Math.round(frameCount_0) + ', Avg Delta: ' + avgDeltaTime_0.toFixed(2) + 'ms');
}
frameCount_0 = 0;
}, 1000);
}
};
// Obfuscated input smoother
jl$utils.inputSmoother_0 = {
lastInputTime_0: 0,
inputBuffer_0: [],
smoothInput_0: function(inputEvent_0) {
var currentTime_0 = performance.now();
this.inputBuffer_0.push({
event_0: inputEvent_0,
timestamp_0: currentTime_0
});
this.inputBuffer_0 = this.inputBuffer_0.filter(function(input_0) {
return currentTime_0 - input_0.timestamp_0 < 100;
});
return this.inputBuffer_0.length > 1;
}
};
// Main initialization function with GWT-style naming
cggl$smoothFix.initialize_SmoothMovement = function initialize_SmoothMovement(){
cggl$smoothFix.$clinit_SmoothMovement();
// Initialize subsystems
cbgm$interpolation.$init_interpolationSystem();
nesg$frameStabilizer.$init_frameStabilizer();
// Hook systems
jl$utils.hookRequestAnimationFrame_0();
cgguc$performance.enhanceCanvasRendering_0();
cgguc$performance.performanceMonitor_0.start_0();
// Keyboard event handler with obfuscated key handling
document.addEventListener('keydown', function(e_0) {
if (e_0.ctrlKey && e_0.altKey) {
switch(e_0.key.toLowerCase()) {
case 'i':
ji2$config.smoothConfig.a = !ji2$config.smoothConfig.a;
console.log('[SMF] Interpolation: ' + (ji2$config.smoothConfig.a ? 'ON' : 'OFF'));
e_0.preventDefault();
break;
case 'p':
ji2$config.smoothConfig.e = !ji2$config.smoothConfig.e;
console.log('[SMF] Prediction: ' + (ji2$config.smoothConfig.e ? 'ON' : 'OFF'));
e_0.preventDefault();
break;
case 'd':
ji2$config.smoothConfig.g = !ji2$config.smoothConfig.g;
console.log('[SMF] Debug mode: ' + (ji2$config.smoothConfig.g ? 'ON' : 'OFF'));
e_0.preventDefault();
break;
}
}
});
console.log('[SMF] Smooth movement system initialized!');
console.log('[SMF] Controls: Ctrl+Alt+I (interpolation), Ctrl+Alt+P (prediction), Ctrl+Alt+D (debug)');
};
// Advanced GWT-style game object detection and hooking
cggl$smoothFix.gameObjectHooker_0 = {
hookedObjects_0: new Set(),
scanForGameObjects_0: function() {
var self_0 = this;
// Scan window object for potential game objects
function scanObject_0(obj_0, depth_0) {
if (depth_0 > 3 || !obj_0) return;
try {
for (var key_0 in obj_0) {
if (typeof obj_0[key_0] === 'object' && obj_0[key_0] !== null) {
// Look for snake-like objects with GWT naming patterns
if (self_0.isGameObject_0(obj_0[key_0])) {
self_0.hookGameObject_0(obj_0[key_0], key_0);
}
if (depth_0 < 2) {
scanObject_0(obj_0[key_0], depth_0 + 1);
}
}
}
} catch (e_0) {
// Ignore access errors
}
}
scanObject_0(window, 0);
},
isGameObject_0: function(obj_0) {
// Check for common game object properties with obfuscated names
return (obj_0.hasOwnProperty('currentSpeed') ||
obj_0.hasOwnProperty('position_0') ||
obj_0.hasOwnProperty('x_0') && obj_0.hasOwnProperty('y_0') ||
obj_0.hasOwnProperty('segments') ||
obj_0.hasOwnProperty('direction_0') ||
obj_0.hasOwnProperty('lastTickPosition'));
},
hookGameObject_0: function(obj_0, objKey_0) {
if (this.hookedObjects_0.has(obj_0)) return;
this.hookedObjects_0.add(obj_0);
// Hook movement-related methods if they exist
if (typeof obj_0.playTill === 'function') {
this.hookPlayTill_0(obj_0);
}
if (typeof obj_0.moveTail === 'function') {
this.hookMoveTail_0(obj_0);
}
if (ji2$config.smoothConfig.g) {
console.log('[SMF] Hooked game object: ' + objKey_0);
}
},
hookPlayTill_0: function(obj_0) {
var originalPlayTill_0 = obj_0.playTill;
obj_0.playTill = function(till_0) {
// Apply smooth movement interpolation
if (ji2$config.smoothConfig.a && this.lastTickPosition) {
var entityId_0 = this.id_0 || Math.random();
var currentPos_0 = {
x_0: this.lastTickPosition.x_0,
y_0: this.lastTickPosition.y_0
};
cbgm$interpolation.updatePosition_0(entityId_0, currentPos_0, performance.now());
}
return originalPlayTill_0.call(this, till_0);
};
},
hookMoveTail_0: function(obj_0) {
var originalMoveTail_0 = obj_0.moveTail;
obj_0.moveTail = function(dt_0, avgSpeedPerMs_0) {
// Apply smoothing to tail movement
if (ji2$config.smoothConfig.a) {
dt_0 = dt_0 * ji2$config.smoothConfig.c;
}
return originalMoveTail_0.call(this, dt_0, avgSpeedPerMs_0);
};
}
};
// Network lag compensation system
jl$utils.lagCompensator_0 = {
latencyHistory_0: [],
avgLatency_0: 50,
measureLatency_0: function() {
var startTime_0 = performance.now();
// Hook into WebSocket or XMLHttpRequest to measure network latency
if (window.WebSocket) {
var originalSend_0 = WebSocket.prototype.send;
WebSocket.prototype.send = function(data_0) {
var sendTime_0 = performance.now();
// Store send time for latency calculation
this._lastSendTime = sendTime_0;
return originalSend_0.call(this, data_0);
};
}
},
updateLatency_0: function(latency_0) {
this.latencyHistory_0.push(latency_0);
if (this.latencyHistory_0.length > 10) {
this.latencyHistory_0.shift();
}
this.avgLatency_0 = this.latencyHistory_0.reduce(function(a, b) { return a + b; }, 0) / this.latencyHistory_0.length;
},
compensatePosition_0: function(position_0, velocity_0) {
if (!ji2$config.smoothConfig.d) return position_0;
var compensation_0 = this.avgLatency_0 / 1000;
return {
x_0: position_0.x_0 + velocity_0.x_0 * compensation_0,
y_0: position_0.y_0 + velocity_0.y_0 * compensation_0
};
}
};
// GWT-style UI system
cgguc$performance.uiSystem_0 = {
panel_0: null,
isVisible_0: false,
createUI_0: function() {
if (this.panel_0) return;
// Create main panel with GWT-style styling
this.panel_0 = document.createElement('div');
this.panel_0.id = 'cggl$smoothFix$panel_0';
this.panel_0.innerHTML = this.getUIHTML_0();
this.panel_0.style.cssText = this.getUIStyles_0();
document.body.appendChild(this.panel_0);
this.bindEvents_0();
this.updateUI_0();
console.log('[SMF] UI system initialized');
},
getUIHTML_0: function() {
return `
<div class="smf-header">
<span class="smf-title">🐍 Wormax.io Smooth Movement</span>
<button class="smf-close" onclick="cgguc$performance.uiSystem_0.toggleUI_0()">×</button>
</div>
<div class="smf-content">
<div class="smf-section">
<h3>🎯 Movement Settings</h3>
<div class="smf-control">
<label>
<input type="checkbox" id="smf-interpolation" ${ji2$config.smoothConfig.a ? 'checked' : ''}>
<span>Interpolation</span>
</label>
<span class="smf-desc">Smooth position transitions</span>
</div>
<div class="smf-control">
<label>
<input type="checkbox" id="smf-prediction" ${ji2$config.smoothConfig.e ? 'checked' : ''}>
<span>Lag Prediction</span>
</label>
<span class="smf-desc">Compensate for network lag</span>
</div>
<div class="smf-control">
<label>
<input type="checkbox" id="smf-lagcomp" ${ji2$config.smoothConfig.d ? 'checked' : ''}>
<span>Lag Compensation</span>
</label>
<span class="smf-desc">Advanced lag handling</span>
</div>
</div>
<div class="smf-section">
<h3>⚙️ Performance</h3>
<div class="smf-control">
<label>Target FPS:</label>
<input type="range" id="smf-fps" min="30" max="120" value="${ji2$config.smoothConfig.b}" step="10">
<span id="smf-fps-value">${ji2$config.smoothConfig.b}</span>
</div>
<div class="smf-control">
<label>Smoothing Factor:</label>
<input type="range" id="smf-smoothing" min="0.1" max="1.0" value="${ji2$config.smoothConfig.c}" step="0.1">
<span id="smf-smoothing-value">${ji2$config.smoothConfig.c}</span>
</div>
<div class="smf-control">
<label>Prediction Time:</label>
<input type="range" id="smf-predtime" min="50" max="200" value="${ji2$config.smoothConfig.f}" step="10">
<span id="smf-predtime-value">${ji2$config.smoothConfig.f}ms</span>
</div>
</div>
<div class="smf-section">
<h3>📊 Statistics</h3>
<div class="smf-stats">
<div class="smf-stat">
<span>Current FPS:</span>
<span id="smf-current-fps">--</span>
</div>
<div class="smf-stat">
<span>Avg Delta:</span>
<span id="smf-avg-delta">--</span>
</div>
<div class="smf-stat">
<span>Hooked Objects:</span>
<span id="smf-hooked-count">0</span>
</div>
<div class="smf-stat">
<span>Network Latency:</span>
<span id="smf-latency">--</span>
</div>
</div>
</div>
<div class="smf-section">
<h3>🔧 Debug</h3>
<div class="smf-control">
<label>
<input type="checkbox" id="smf-debug" ${ji2$config.smoothConfig.g ? 'checked' : ''}>
<span>Debug Mode</span>
</label>
<span class="smf-desc">Console logging</span>
</div>
<button class="smf-button" onclick="cgguc$performance.uiSystem_0.resetSettings_0()">Reset to Defaults</button>
<button class="smf-button" onclick="cgguc$performance.uiSystem_0.exportSettings_0()">Export Settings</button>
</div>
</div>
<div class="smf-footer">
<span>Press Ctrl+Shift+M to toggle | v1.0.0</span>
</div>
`;
},
getUIStyles_0: function() {
return `
position: fixed;
top: 20px;
right: 20px;
width: 320px;
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
border: 2px solid #0f3460;
border-radius: 12px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
font-size: 12px;
color: #e94560;
z-index: 999999;
backdrop-filter: blur(10px);
transition: all 0.3s ease;
user-select: none;
`;
},
bindEvents_0: function() {
var self_0 = this;
// Interpolation toggle
document.getElementById('smf-interpolation').addEventListener('change', function(e_0) {
ji2$config.smoothConfig.a = e_0.target.checked;
console.log('[SMF] Interpolation: ' + (ji2$config.smoothConfig.a ? 'ON' : 'OFF'));
});
// Prediction toggle
document.getElementById('smf-prediction').addEventListener('change', function(e_0) {
ji2$config.smoothConfig.e = e_0.target.checked;
console.log('[SMF] Prediction: ' + (ji2$config.smoothConfig.e ? 'ON' : 'OFF'));
});
// Lag compensation toggle
document.getElementById('smf-lagcomp').addEventListener('change', function(e_0) {
ji2$config.smoothConfig.d = e_0.target.checked;
console.log('[SMF] Lag Compensation: ' + (ji2$config.smoothConfig.d ? 'ON' : 'OFF'));
});
// Debug mode toggle
document.getElementById('smf-debug').addEventListener('change', function(e_0) {
ji2$config.smoothConfig.g = e_0.target.checked;
console.log('[SMF] Debug Mode: ' + (ji2$config.smoothConfig.g ? 'ON' : 'OFF'));
});
// FPS slider
document.getElementById('smf-fps').addEventListener('input', function(e_0) {
ji2$config.smoothConfig.b = parseInt(e_0.target.value);
document.getElementById('smf-fps-value').textContent = ji2$config.smoothConfig.b;
nesg$frameStabilizer.frameInterval_0 = 1000 / ji2$config.smoothConfig.b;
});
// Smoothing factor slider
document.getElementById('smf-smoothing').addEventListener('input', function(e_0) {
ji2$config.smoothConfig.c = parseFloat(e_0.target.value);
document.getElementById('smf-smoothing-value').textContent = ji2$config.smoothConfig.c;
});
// Prediction time slider
document.getElementById('smf-predtime').addEventListener('input', function(e_0) {
ji2$config.smoothConfig.f = parseInt(e_0.target.value);
document.getElementById('smf-predtime-value').textContent = ji2$config.smoothConfig.f + 'ms';
});
},
toggleUI_0: function() {
if (!this.panel_0) return;
this.isVisible_0 = !this.isVisible_0;
this.panel_0.style.display = this.isVisible_0 ? 'block' : 'none';
},
updateUI_0: function() {
if (!this.panel_0) return;
// Update statistics
var currentFpsEl_0 = document.getElementById('smf-current-fps');
var avgDeltaEl_0 = document.getElementById('smf-avg-delta');
var hookedCountEl_0 = document.getElementById('smf-hooked-count');
var latencyEl_0 = document.getElementById('smf-latency');
if (currentFpsEl_0) currentFpsEl_0.textContent = Math.round(frameCount_0) + ' FPS';
if (avgDeltaEl_0) avgDeltaEl_0.textContent = avgDeltaTime_0.toFixed(1) + 'ms';
if (hookedCountEl_0) hookedCountEl_0.textContent = cggl$smoothFix.gameObjectHooker_0.hookedObjects_0.size;
if (latencyEl_0) latencyEl_0.textContent = jl$utils.lagCompensator_0.avgLatency_0.toFixed(0) + 'ms';
},
resetSettings_0: function() {
ji2$config.smoothConfig = {
a: true, // interpolationEnabled
b: 60, // frameRateTarget
c: 0.8, // smoothingFactor
d: true, // lagCompensation
e: true, // predictionEnabled
f: 100, // maxPredictionTime
g: false // debugMode
};
// Update UI elements
document.getElementById('smf-interpolation').checked = ji2$config.smoothConfig.a;
document.getElementById('smf-prediction').checked = ji2$config.smoothConfig.e;
document.getElementById('smf-lagcomp').checked = ji2$config.smoothConfig.d;
document.getElementById('smf-debug').checked = ji2$config.smoothConfig.g;
document.getElementById('smf-fps').value = ji2$config.smoothConfig.b;
document.getElementById('smf-smoothing').value = ji2$config.smoothConfig.c;
document.getElementById('smf-predtime').value = ji2$config.smoothConfig.f;
// Update value displays
document.getElementById('smf-fps-value').textContent = ji2$config.smoothConfig.b;
document.getElementById('smf-smoothing-value').textContent = ji2$config.smoothConfig.c;
document.getElementById('smf-predtime-value').textContent = ji2$config.smoothConfig.f + 'ms';
console.log('[SMF] Settings reset to defaults');
},
exportSettings_0: function() {
var settings_0 = JSON.stringify(ji2$config.smoothConfig, null, 2);
navigator.clipboard.writeText(settings_0).then(function() {
console.log('[SMF] Settings copied to clipboard');
alert('Settings copied to clipboard!');
});
}
};
// Auto-initialization with DOM ready check
function initWhenReady_0() {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', cggl$smoothFix.initialize_SmoothMovement_Enhanced);
} else {
cggl$smoothFix.initialize_SmoothMovement_Enhanced();
}
}
// Start the enhanced smooth movement fix
initWhenReady_0();
})();