It transforms every site into outer space - stars, planets, nebulae, shooting meteors.
// ==UserScript==
// @name Space Exploration Mode - Galaxy Theme
// @namespace http://tampermonkey.net/
// @version 1.1
// @description It transforms every site into outer space - stars, planets, nebulae, shooting meteors.
// @author Mustafa Hakan
// @match *://*/*
// @grant none
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';
let stars = [], meteors = [], planets = [], nebulaParticles = [];
let canvas, ctx, W, H, mouseX = 0, mouseY = 0, animId;
let speed = 0, lastScroll = 0, scrollDirection = 0;
const PLANET_TYPES = [
{ name: 'Dünya', emoji: '🌍', size: 60, glow: '#4a90d9', orbit: true },
{ name: 'Satürn', emoji: '🪐', size: 70, glow: '#d9a64a', orbit: true },
{ name: 'Jüpiter', emoji: '🪐', size: 80, glow: '#d9b87a', orbit: true },
{ name: 'Mars', emoji: '🔴', size: 40, glow: '#d94a4a', orbit: false },
{ name: 'Ay', emoji: '🌙', size: 35, glow: '#e8e8e8', orbit: false },
{ name: 'Güneş', emoji: '☀️', size: 90, glow: '#ffd700', orbit: false, bright: true },
{ name: 'Neptün', emoji: '🔵', size: 50, glow: '#4a6ad9', orbit: true },
{ name: 'Ateş Gezegeni', emoji: '🟠', size: 45, glow: '#ff6b35', orbit: true }
];
function rand(a, b) { return Math.random() * (b - a) + a; }
class Star {
constructor() {
this.reset(true);
}
reset(init) {
this.x = rand(0, W);
this.y = init ? rand(0, H) : -5;
this.size = rand(0.5, 3);
this.brightness = rand(0.3, 1);
this.twinkleSpeed = rand(0.005, 0.03);
this.twinkleOffset = rand(0, Math.PI * 2);
this.color = ['#fff', '#ffd', '#ddf', '#fdf', '#dff'][Math.floor(rand(0, 5))];
this.driftX = rand(-0.02, 0.02);
this.driftY = rand(0.1, 0.5);
}
update() {
this.y += this.driftY + scrollDirection * 0.5;
this.x += this.driftX;
if (this.y > H + 5) this.reset(false);
if (this.x < 0) this.x = W;
if (this.x > W) this.x = 0;
}
draw() {
const twinkle = Math.sin(Date.now() * this.twinkleSpeed + this.twinkleOffset) * 0.3 + 0.7;
const alpha = this.brightness * twinkle;
ctx.fillStyle = this.color;
ctx.globalAlpha = alpha;
ctx.beginPath();
ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
ctx.fill();
if (this.size > 1.5) {
ctx.shadowColor = this.color;
ctx.shadowBlur = this.size * 3;
ctx.fill();
ctx.shadowBlur = 0;
}
ctx.globalAlpha = 1;
}
}
class Meteor {
constructor() {
this.reset();
}
reset() {
this.x = rand(0, W);
this.y = rand(-100, -10);
this.length = rand(40, 120);
this.speed = rand(3, 8);
this.angle = rand(-0.3, -0.1);
this.opacity = rand(0.6, 1);
this.trail = [];
}
update() {
this.trail.push({ x: this.x, y: this.y, alpha: 1 });
if (this.trail.length > 15) this.trail.shift();
this.trail.forEach(t => t.alpha -= 0.06);
this.x += Math.cos(this.angle) * this.speed;
this.y += Math.sin(this.angle) * this.speed + this.speed * 0.7;
if (this.y > H + 50 || this.x < -50 || this.x > W + 50) {
this.reset();
this.y = rand(-200, -20);
}
}
draw() {
if (this.trail.length < 2) return;
ctx.strokeStyle = '#fff';
ctx.lineWidth = 1.5;
ctx.lineCap = 'round';
ctx.beginPath();
ctx.moveTo(this.trail[0].x, this.trail[0].y);
for (let i = 1; i < this.trail.length; i++) {
ctx.lineTo(this.trail[i].x, this.trail[i].y);
}
ctx.stroke();
ctx.fillStyle = '#fff';
ctx.shadowColor = '#fff';
ctx.shadowBlur = 8;
ctx.beginPath();
ctx.arc(this.x, this.y, 1.5, 0, Math.PI * 2);
ctx.fill();
ctx.shadowBlur = 0;
}
}
class Planet {
constructor() {
const type = PLANET_TYPES[Math.floor(rand(0, PLANET_TYPES.length))];
Object.assign(this, type);
this.x = rand(100, W - 100);
this.y = rand(80, H - 200);
this.baseX = this.x;
this.baseY = this.y;
this.orbitRadius = rand(30, 80);
this.orbitSpeed = rand(0.0002, 0.001);
this.orbitAngle = rand(0, Math.PI * 2);
this.floatOffset = rand(0, Math.PI * 2);
}
update() {
this.floatOffset += 0.003;
const floatY = Math.sin(this.floatOffset) * 8;
if (this.orbit) {
this.orbitAngle += this.orbitSpeed;
this.x = this.baseX + Math.cos(this.orbitAngle) * this.orbitRadius;
this.y = this.baseY + Math.sin(this.orbitAngle) * this.orbitRadius * 0.4 + floatY;
} else {
this.y = this.baseY + floatY;
this.x += (mouseX - W / 2) * 0.0001;
}
this.x += scrollDirection * 0.1;
if (this.x < -50) this.x = W + 50;
if (this.x > W + 50) this.x = -50;
}
draw() {
ctx.save();
ctx.translate(this.x, this.y);
if (this.bright) {
const gradient = ctx.createRadialGradient(0, 0, this.size * 0.5, 0, 0, this.size * 2);
gradient.addColorStop(0, 'rgba(255,255,200,0.3)');
gradient.addColorStop(0.5, 'rgba(255,200,100,0.1)');
gradient.addColorStop(1, 'rgba(255,150,0,0)');
ctx.fillStyle = gradient;
ctx.beginPath();
ctx.arc(0, 0, this.size * 2, 0, Math.PI * 2);
ctx.fill();
}
ctx.shadowColor = this.glow;
ctx.shadowBlur = this.bright ? 40 : 20;
ctx.font = this.size + 'px serif';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillText(this.emoji, 0, 0);
ctx.shadowBlur = 0;
if (this.orbit) {
ctx.strokeStyle = 'rgba(255,255,255,0.05)';
ctx.lineWidth = 1;
ctx.setLineDash([3, 8]);
ctx.beginPath();
ctx.ellipse(0, -Math.sin(this.floatOffset) * 8, this.orbitRadius, this.orbitRadius * 0.4, 0, 0, Math.PI * 2);
ctx.stroke();
ctx.setLineDash([]);
}
ctx.restore();
}
}
class Nebula {
constructor() {
this.reset();
}
reset() {
this.x = rand(0, W);
this.y = rand(0, H);
this.size = rand(100, 300);
this.color = ['rgba(100,50,200,', 'rgba(50,100,200,', 'rgba(200,50,150,', 'rgba(50,200,150,', 'rgba(200,100,50,'][Math.floor(rand(0, 5))];
this.opacity = rand(0.015, 0.04);
this.driftX = rand(-0.1, 0.1);
this.driftY = rand(-0.1, 0.1);
}
update() {
this.x += this.driftX;
this.y += this.driftY + scrollDirection * 0.2;
if (this.x < -this.size) this.x = W + this.size;
if (this.x > W + this.size) this.x = -this.size;
if (this.y < -this.size) this.y = H + this.size;
if (this.y > H + this.size) this.y = -this.size;
}
draw() {
const gradient = ctx.createRadialGradient(this.x, this.y, 0, this.x, this.y, this.size);
gradient.addColorStop(0, this.color + this.opacity + ')');
gradient.addColorStop(1, 'rgba(0,0,0,0)');
ctx.fillStyle = gradient;
ctx.beginPath();
ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
ctx.fill();
}
}
function createSky() {
stars = [];
for (let i = 0; i < 250; i++) stars.push(new Star());
meteors = [];
for (let i = 0; i < 3; i++) meteors.push(new Meteor());
planets = [];
for (let i = 0; i < 5; i++) planets.push(new Planet());
nebulaParticles = [];
for (let i = 0; i < 6; i++) nebulaParticles.push(new Nebula());
}
function init() {
if (document.getElementById('space-canvas')) return;
canvas = document.createElement('canvas');
canvas.id = 'space-canvas';
canvas.style.cssText = `
position:fixed;top:0;left:0;width:100%;height:100%;
z-index:2147483640;pointer-events:none;
background:linear-gradient(180deg,#000011,#0a0a2e 30%,#0d0d1a 60%,#000011);
`;
document.body.appendChild(canvas);
W = canvas.width = window.innerWidth;
H = canvas.height = window.innerHeight;
ctx = canvas.getContext('2d');
createSky();
window.addEventListener('resize', () => {
W = canvas.width = window.innerWidth;
H = canvas.height = window.innerHeight;
createSky();
});
document.addEventListener('mousemove', (e) => {
mouseX = e.clientX;
mouseY = e.clientY;
});
window.addEventListener('scroll', () => {
const currentScroll = window.scrollY;
scrollDirection = currentScroll - lastScroll;
lastScroll = currentScroll;
speed = Math.abs(scrollDirection);
if (speed > 50) speed = 50;
setTimeout(() => { scrollDirection *= 0.5; }, 200);
});
loop();
}
function loop() {
ctx.clearRect(0, 0, W, H);
const bgGrad = ctx.createLinearGradient(0, 0, 0, H);
bgGrad.addColorStop(0, '#000011');
bgGrad.addColorStop(0.3, '#0a0a2e');
bgGrad.addColorStop(0.6, '#0d0d1a');
bgGrad.addColorStop(1, '#000011');
ctx.fillStyle = bgGrad;
ctx.fillRect(0, 0, W, H);
nebulaParticles.forEach(n => { n.update(); n.draw(); });
stars.forEach(s => { s.update(); s.draw(); });
planets.forEach(p => { p.update(); p.draw(); });
meteors.forEach(m => { m.update(); m.draw(); });
if (speed > 5) {
for (let i = 0; i < Math.floor(speed / 3); i++) {
const star = new Star();
star.y = rand(0, H);
star.driftY = speed * 0.3;
star.draw();
}
}
ctx.fillStyle = 'rgba(255,255,255,0.02)';
ctx.font = '12px monospace';
ctx.fillText('✦ UZAY KEŞİF MODU ✦', 20, H - 20);
ctx.fillText('Mustafa Hakan', W - 130, H - 20);
animId = requestAnimationFrame(loop);
}
function addInfoBadge() {
const badge = document.createElement('div');
badge.style.cssText = `
position:fixed;top:15px;right:15px;background:rgba(0,0,0,0.6);
color:#fff;padding:8px 14px;border-radius:20px;font-size:11px;
z-index:2147483645;font-family:system-ui;pointer-events:none;
border:1px solid rgba(255,255,255,0.1);letter-spacing:0.5px;
`;
badge.innerHTML = '🪐 Uzay Modu Aktif • Kaydır ===>';
document.body.appendChild(badge);
setTimeout(() => { badge.style.opacity = '0'; badge.style.transition = 'opacity 2s'; }, 8000);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => setTimeout(init, 500));
} else {
setTimeout(init, 500);
}
setTimeout(addInfoBadge, 1000);
console.log('🪐 Uzay Keşif Modu Aktif | Sayfayı kaydır, yıldızlara bak |');
})();