Lets you choose if you want to drive or map when playing coop.
// ==UserScript==
// @name GeoGuessr Co-op
// @namespace http://tampermonkey.net/
// @version 3
// @description Lets you choose if you want to drive or map when playing coop.
// @author Rotski
// @match https://www.geoguessr.com/*
// @license MIT
// @icon https://www.svgrepo.com/show/421676/gps-location-maps.svg
// @grant none
// ==/UserScript==
(function () {
'use strict';
// Load the last mode from local storage or default to driving mode
let mapOnlyMode = localStorage.getItem('mapOnlyMode') === 'true';
let intervalId;
let hoverIntervalId;
function applyStyles(mapContainer) {
mapContainer.style.position = 'fixed';
mapContainer.style.top = '0';
mapContainer.style.left = '0';
mapContainer.style.width = '100%';
mapContainer.style.height = '100%';
mapContainer.style.zIndex = '10000';
mapContainer.style.backgroundColor = '#000';
mapContainer.style.opacity = '1';
mapContainer.style.transition = 'none';
mapContainer.style.pointerEvents = 'auto';
mapContainer.style.setProperty('opacity', '1', 'important');
}
function fixTransparency(mapContainer) {
const hoverEvent = new MouseEvent('mouseover', { bubbles: true, cancelable: true });
mapContainer.dispatchEvent(hoverEvent);
}
function simulateHover(mapContainer) {
hoverIntervalId = setInterval(() => {
if (mapOnlyMode) {
fixTransparency(mapContainer);
}
}, 500);
}
function stopSimulatingHover() {
clearInterval(hoverIntervalId);
}
function toggleMode(isMap) {
mapOnlyMode = isMap;
localStorage.setItem('mapOnlyMode', mapOnlyMode); // Save the mode to local storage
adjustMapVisibility();
}
function adjustMapVisibility() {
const mapContainer = document.querySelector('.guess-map_canvasContainer__s7oJp');
const streetView = document.querySelector('.game_panorama__1moRf');
const body = document.body;
const guessButton = document.querySelector('.button_button__aR6_e.button_variantBlack__UsxpK.button_disabled__rTguF');
if (mapOnlyMode) {
if (streetView) streetView.style.display = 'none';
if (mapContainer) {
applyStyles(mapContainer);
fixTransparency(mapContainer);
simulateHover(mapContainer);
}
body.style.overflow = 'hidden';
if (guessButton) {
guessButton.style.position = 'fixed';
guessButton.style.bottom = '20px';
guessButton.style.left = '50%';
guessButton.style.transform = 'translateX(-50%)'; // Center the button horizontally
guessButton.style.zIndex = '10001'; // Make sure it's visible above the map
}
} else {
if (streetView) streetView.style.display = 'block';
if (mapContainer) {
mapContainer.removeAttribute('style');
}
body.style.overflow = '';
if (guessButton) {
guessButton.removeAttribute('style'); // Reset styles to default
}
stopSimulatingHover();
}
}
function updateButtonStyles(mapButton, driveButton) {
if (mapOnlyMode) {
mapButton.style.backgroundColor = 'green';
mapButton.style.opacity = '1';
driveButton.style.backgroundColor = 'red';
driveButton.style.opacity = '0.5';
} else {
mapButton.style.backgroundColor = 'red';
mapButton.style.opacity = '0.5';
driveButton.style.backgroundColor = 'green';
driveButton.style.opacity = '1';
}
}
function addButtons() {
const mapButton = document.createElement('button');
const driveButton = document.createElement('button');
mapButton.innerText = "Map";
driveButton.innerText = "Drive";
[mapButton, driveButton].forEach(button => {
button.style.position = "absolute";
button.style.top = "160px"; // Set vertical offset
button.style.zIndex = "99999";
button.style.padding = "10px";
button.style.color = "white";
button.style.border = "none";
button.style.borderRadius = "5px";
button.style.cursor = "pointer";
});
mapButton.style.right = "50px";
driveButton.style.right = "50px";
driveButton.style.top = "220px"; // Additional offset for the second button
mapButton.onclick = () => {
toggleMode(true);
updateButtonStyles(mapButton, driveButton);
};
driveButton.onclick = () => {
toggleMode(false);
updateButtonStyles(mapButton, driveButton);
};
document.body.appendChild(mapButton);
document.body.appendChild(driveButton);
updateButtonStyles(mapButton, driveButton); // Set initial button styles
}
function init() {
addButtons();
adjustMapVisibility(); // Apply initial map visibility based on mode
}
window.addEventListener('load', init);
// Observers to handle dynamic content
const observer = new MutationObserver(() => {
if (mapOnlyMode) {
adjustMapVisibility();
}
});
observer.observe(document.body, {
childList: true,
subtree: true
});
})();