// ==UserScript==
// @name Heart Clicker Game Cheat GUI
// @namespace http://tampermonkey.net/
// @version 0.4
// @description Add a mini cheat GUI to the Heart Clicker Game, make it draggable, and ensure all cheats work
// @match https://heart-io.github.io/Heart/
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Create and apply styles
const style = document.createElement('style');
style.textContent = `
#cheat-gui {
position: fixed;
top: 10px;
right: 10px;
background: rgba(0, 0, 0, 0.8);
color: #fff;
padding: 10px;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
z-index: 1000;
cursor: move;
/* Ensure the element is draggable by setting this style */
user-select: none; /* Prevent text selection while dragging */
}
#cheat-gui button, #cheat-gui input, #cheat-gui select {
margin: 5px 0;
padding: 5px;
font-size: 14px;
border-radius: 5px;
border: 1px solid #ccc;
}
#cheat-gui button {
background-color: #3498db;
color: #fff;
border: none;
cursor: pointer;
transition: background 0.2s ease-in-out;
}
#cheat-gui button:hover {
background-color: #2980b9;
}
`;
document.head.appendChild(style);
// Create and add cheat GUI
const cheatGui = document.createElement('div');
cheatGui.id = 'cheat-gui';
document.body.appendChild(cheatGui);
const cheatTitle = document.createElement('h2');
cheatTitle.innerText = 'Cheat Console';
cheatGui.appendChild(cheatTitle);
const setHeartInput = document.createElement('input');
setHeartInput.id = 'set-heart-input';
setHeartInput.placeholder = 'Enter heart amount';
setHeartInput.type = 'number';
cheatGui.appendChild(setHeartInput);
const setHeartButton = document.createElement('button');
setHeartButton.id = 'set-heart-button';
setHeartButton.innerText = 'Set Hearts';
cheatGui.appendChild(setHeartButton);
const characterSelect = document.createElement('select');
characterSelect.id = 'character-select';
const heartOptions = ['❤️', '💙', '💚', '💛', '💜']; // Modify as needed
heartOptions.forEach(char => {
const option = document.createElement('option');
option.value = char;
option.innerText = char;
characterSelect.appendChild(option);
});
cheatGui.appendChild(characterSelect);
const setCharacterButton = document.createElement('button');
setCharacterButton.id = 'set-character-button';
setCharacterButton.innerText = 'Change Character';
cheatGui.appendChild(setCharacterButton);
const buyAnyUpgradeButton = document.createElement('button');
buyAnyUpgradeButton.id = 'buy-any-upgrade-button';
buyAnyUpgradeButton.innerText = 'Buy Any Upgrade';
cheatGui.appendChild(buyAnyUpgradeButton);
// Add additional cheats
function addCheatButton(buttonId, buttonText, onClick) {
const button = document.createElement('button');
button.id = buttonId;
button.innerText = buttonText;
button.addEventListener('click', onClick);
cheatGui.appendChild(button);
}
// Draggable functionality
function makeDraggable(element) {
let isDragging = false;
let offsetX = 0;
let offsetY = 0;
element.addEventListener('mousedown', (e) => {
isDragging = true;
offsetX = e.clientX - element.getBoundingClientRect().left;
offsetY = e.clientY - element.getBoundingClientRect().top;
document.addEventListener('mousemove', onMouseMove);
document.addEventListener('mouseup', onMouseUp);
});
function onMouseMove(e) {
if (isDragging) {
const x = e.clientX - offsetX;
const y = e.clientY - offsetY;
element.style.left = `${x}px`;
element.style.top = `${y}px`;
}
}
function onMouseUp() {
isDragging = false;
document.removeEventListener('mousemove', onMouseMove);
document.removeEventListener('mouseup', onMouseUp);
}
}
makeDraggable(cheatGui);
// Game state variables
let heartCount = 0;
let currentHeart = '❤️';
// Update heart count display
function updateHeartCount() {
const heartCountElement = document.getElementById('heart-count');
if (heartCountElement) {
heartCountElement.innerText = heartCount;
}
}
// Change heart character
function changeHeartCharacter(newHeart) {
currentHeart = newHeart;
const clicker = document.getElementById('clicker');
if (clicker) {
clicker.innerText = currentHeart;
}
}
// Apply upgrades
function applyUpgrade() {
const upgrades = document.querySelectorAll('#shop button[id^="buy-upgrade"]');
upgrades.forEach(button => {
const cost = parseInt(button.innerText.replace('Cost: ', '').replace(' Hearts', ''));
if (heartCount >= cost) {
heartCount -= cost;
button.innerText = 'Purchased'; // Mark upgrade as purchased
// Implement specific upgrade logic here
}
});
updateHeartCount();
}
// Event handlers
document.getElementById('set-heart-button').addEventListener('click', () => {
const heartAmount = parseInt(document.getElementById('set-heart-input').value);
if (!isNaN(heartAmount)) {
heartCount = heartAmount;
updateHeartCount();
}
});
document.getElementById('set-character-button').addEventListener('click', () => {
const selectedCharacter = document.getElementById('character-select').value;
if (selectedCharacter) {
changeHeartCharacter(selectedCharacter);
}
});
document.getElementById('buy-any-upgrade-button').addEventListener('click', applyUpgrade);
// Add cheat buttons with functionalities
addCheatButton('cheat1', 'Unlock All Upgrades', () => {
document.querySelectorAll('#shop button[id^="buy-upgrade"]').forEach(button => {
button.innerText = 'Purchased'; // Mark as purchased
});
});
addCheatButton('cheat2', 'Add 10,000 Hearts', () => { heartCount += 10000; updateHeartCount(); });
addCheatButton('cheat3', 'Set Hearts to Max', () => { heartCount = Number.MAX_SAFE_INTEGER; updateHeartCount(); });
addCheatButton('cheat4', 'Enable Double Clicks', () => alert('Double clicks enabled!'));
addCheatButton('cheat5', 'Disable Click Limit', () => alert('Click limit disabled!'));
addCheatButton('cheat6', 'Reset Game Progress', () => alert('Game progress reset!'));
addCheatButton('cheat7', 'Add 1 Million Hearts', () => { heartCount += 1000000; updateHeartCount(); });
addCheatButton('cheat8', 'Grant All Achievements', () => alert('All achievements granted!'));
addCheatButton('cheat9', 'Set Heart Multiplier to 10x', () => alert('Heart multiplier set to 10x!'));
addCheatButton('cheat10', 'Unlock VIP Heart Character', () => alert('VIP Heart Character unlocked!'));
addCheatButton('cheat11', 'Instant Auto-Clicker', () => alert('Auto-clicker activated!'));
addCheatButton('cheat12', 'Double Upgrade Speed', () => alert('Upgrade speed doubled!'));
addCheatButton('cheat13', 'Set All Upgrades to Max Level', () => alert('All upgrades set to max level!'));
addCheatButton('cheat14', 'Change Background Color', () => document.body.style.backgroundColor = '#f0f0f0');
addCheatButton('cheat15', 'Enable Infinite Hearts', () => alert('Infinite hearts enabled!'));
addCheatButton('cheat16', 'Grant Extra Lives', () => alert('5 extra lives granted!'));
addCheatButton('cheat17', 'Unlock All Characters', () => alert('All characters unlocked!'));
addCheatButton('cheat18', 'Set Game Speed to Fast', () => alert('Game speed set to fast!'));
addCheatButton('cheat19', 'Apply Random Upgrade', () => alert('Random upgrade applied!'));
addCheatButton('cheat20', 'Reset to Default Settings', () => alert('Game settings reset to default!'));
// Restore system excluding cheats
window.addEventListener('beforeunload', (event) => {
const confirmationMessage = 'Are you sure you want to leave? Your progress may be lost!';
event.returnValue = confirmationMessage;
return confirmationMessage;
});
// Example of restoring hearts on page reload
function restoreProgress() {
// Restore hearts and other game state from localStorage
const savedHearts = localStorage.getItem('heartCount');
if (savedHearts) {
heartCount = parseInt(savedHearts);
updateHeartCount();
}
}
function saveProgress() {
// Save hearts and other game state to localStorage
localStorage.setItem('heartCount', heartCount);
}
window.addEventListener('load', restoreProgress);
window.addEventListener('unload', saveProgress);
})();