feat: small improvements

This commit is contained in:
Kirill Siukhin 2025-06-23 17:44:53 +05:00
parent 1e29447a50
commit 7a0958ef9d
6 changed files with 92 additions and 46 deletions

View File

@ -8,6 +8,7 @@ body {
font-family: "Noto Sans", sans-serif; font-family: "Noto Sans", sans-serif;
background-color: var(--color-dark); background-color: var(--color-dark);
color: var(--color-light); color: var(--color-light);
text-align: center;
} }
a { a {
@ -42,6 +43,12 @@ a {
text-shadow: 2px 2px 15px rgba(var(--color-light), 0.9); text-shadow: 2px 2px 15px rgba(var(--color-light), 0.9);
} }
.small-text {
font-family: "Noto Sans", sans-serif;
font-weight: 400;
font-size: 0.25em;
}
.btn { .btn {
display: flex; display: flex;
align-items: center; align-items: center;
@ -128,6 +135,7 @@ a {
color: var(--color-dark); color: var(--color-dark);
padding: 1rem; padding: 1rem;
border-radius: 8px; border-radius: 8px;
margin-bottom: 1rem;
} }
.phone-only { .phone-only {

View File

@ -30,7 +30,7 @@
opacity: 1; opacity: 1;
} }
100% { 100% {
left: 90%; left: 80%;
opacity: 0; opacity: 0;
transform: rotate(360deg); transform: rotate(360deg);
} }
@ -110,11 +110,10 @@
} }
} }
.upg-credits-footer {
margin-top: 1rem;
text-align: center;
}
.upg-credits-play-again { .upg-credits-play-again {
margin-top: 2rem; margin-top: 2rem;
} }
#upg-multiplier {
display: none;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -26,7 +26,7 @@
</nav> </nav>
<main class="main"> <main class="main">
<h1 class="heading">Mood Clicker</h1> <h1 class="heading">Mood Clicker <i class="small-text">(alpha?)</i></h1>
<span class="mood-counter">Current Mood: <span id="mood-counter">0</span></span> <span class="mood-counter">Current Mood: <span id="mood-counter">0</span></span>
<button class="click-btn" onclick="onLiftMoodClick()"> <button class="click-btn" onclick="onLiftMoodClick()">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="bi bi-arrow-up" viewBox="0 0 16 16"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="bi bi-arrow-up" viewBox="0 0 16 16">
@ -48,6 +48,8 @@
<!-- UPGRADES --> <!-- UPGRADES -->
<i id="upg-multiplier">Multiplier: x1</i>
<div id="upg-saves"> <div id="upg-saves">
<span id="upg-saves-text"></span> <span id="upg-saves-text"></span>
<span id="upg-saves-reset" onclick="onResetProgressClick()">Reset progress</span> <span id="upg-saves-reset" onclick="onResetProgressClick()">Reset progress</span>
@ -73,22 +75,17 @@
<div class="upg-credits-inner"> <div class="upg-credits-inner">
<h1 class="heading">Mood Clicker</h1> <h1 class="heading">Mood Clicker</h1>
<p>Thanks for playing!</p>
<span>Programmed by <b>Kirill Siukhin</b></span>
<h2>Visuals</h2> <h2>Visuals</h2>
<span>Upgrade icons by <b>Kirill Siukhin</b></span> <span>Upgrade icons by <b>Kirill Siukhin</b></span>
<span>Cuteface by <b>realexa770</b></span> <span>Cuteface by <b>realexa770</b></span>
<h2>Music</h2> <h2>Music</h2>
<span>Background music "Mood Not Found" by <b>Kirill Siukhin</b></span> <span>"Mood Not Found" by <b>Kirill Siukhin</b></span>
<span>Rain FX by <b>Kirill Siukhin</b></span> <span>Rain FX by <b>Kirill Siukhin</b></span>
<h2>Other</h2>
<span>Programmed by <b>Kirill Siukhin</b></span>
<div class="upg-credits-footer">
<p>Made with ❤️ by <a href="https://misterkirill.com" class="link">Mister Kirill</a></p>
<p>Thanks for playing!</p>
</div>
<button class="btn upg-credits-play-again" onclick="resetProgress()">Play again</button> <button class="btn upg-credits-play-again" onclick="resetProgress()">Play again</button>
</div> </div>
</div> </div>

View File

@ -1,6 +1,7 @@
let mood = 0; let mood = 0;
let moodPerClick = 1; // FOR TESTING PURPOSES, SHOULD BE 1 IN PRODUCTION let moodPerClick = 1;
let purchasedUpgrades = []; let purchasedUpgrades = [];
let multiplier = 1;
const upgradesContainer = document.getElementById('upgrades'); const upgradesContainer = document.getElementById('upgrades');
const moodCounter = document.getElementById('mood-counter'); const moodCounter = document.getElementById('mood-counter');
@ -17,24 +18,26 @@ const musicRange = document.getElementById('music-range');
const audioMusic = new Audio('./assets/audio/mood_not_found.mp3'); const audioMusic = new Audio('./assets/audio/mood_not_found.mp3');
const audioRain = new Audio('./assets/audio/rain.mp3'); const audioRain = new Audio('./assets/audio/rain.mp3');
const upgMultiplier = document.getElementById('upg-multiplier');
function updateMoodCounter() { function updateMoodCounter() {
moodCounter.innerText = mood; moodCounter.innerText = Math.floor(mood);
updateUpgrades(); updateUpgrades();
if (mood < 100) { if (mood < 50) {
favicon.setAttribute('href', './assets/favicons/1.ico'); favicon.setAttribute('href', './assets/favicons/1.ico');
} else if (mood < 1e3) { } else if (mood < 500) {
favicon.setAttribute('href', './assets/favicons/2.ico'); favicon.setAttribute('href', './assets/favicons/2.ico');
} else if (mood < 1e5) { } else if (mood < 1500) {
favicon.setAttribute('href', './assets/favicons/3.ico'); favicon.setAttribute('href', './assets/favicons/3.ico');
} else if (mood < 1e9) { } else if (mood < 4000) {
favicon.setAttribute('href', './assets/favicons/4.ico'); favicon.setAttribute('href', './assets/favicons/4.ico');
} else if (mood < 1e16) { } else if (mood < 80000) {
favicon.setAttribute('href', './assets/favicons/5.ico'); favicon.setAttribute('href', './assets/favicons/5.ico');
} else if (mood < 1e19) { } else if (mood < 300000) {
favicon.setAttribute('href', './assets/favicons/6.ico'); favicon.setAttribute('href', './assets/favicons/6.ico');
} else if (mood < 1e22) { } else if (mood < 2000000) {
favicon.setAttribute('href', './assets/favicons/7.ico'); favicon.setAttribute('href', './assets/favicons/7.ico');
} }
} }
@ -77,7 +80,7 @@ function updateUpgrades() {
} }
function onLiftMoodClick() { function onLiftMoodClick() {
mood += moodPerClick; mood += moodPerClick * multiplier;
updateMoodCounter(); updateMoodCounter();
} }
@ -113,6 +116,9 @@ function enableSaves() {
const save = { const save = {
mood, mood,
purchasedUpgrades, purchasedUpgrades,
multiplier: +multiplier,
musicVolume: audioMusic.volume,
rainVolume: audioRain.volume,
}; };
localStorage.setItem('save', JSON.stringify(save)); localStorage.setItem('save', JSON.stringify(save));
@ -133,6 +139,11 @@ function loadSave() {
if (save) { if (save) {
const decodedSave = JSON.parse(save); const decodedSave = JSON.parse(save);
mood = decodedSave.mood; mood = decodedSave.mood;
audioMusic.volume = decodedSave.musicVolume;
audioRain.volume = decodedSave.rainVolume;
multiplier = decodedSave.multiplier;
upgMultiplier.innerText = 'Multiplier: x' + multiplier.toFixed(1);
const needUpgrades = upgrades.filter((upgrade) => decodedSave.purchasedUpgrades.includes(upgrade.id)); const needUpgrades = upgrades.filter((upgrade) => decodedSave.purchasedUpgrades.includes(upgrade.id));
needUpgrades.forEach((nUpgrade) => { needUpgrades.forEach((nUpgrade) => {
@ -165,23 +176,29 @@ function getRandomEmoji() {
return emojis[Math.floor(Math.random() * emojis.length)]; return emojis[Math.floor(Math.random() * emojis.length)];
} }
function addEmoji() { function addEmoji(count = 1) {
const upgEmojis = document.getElementById('upg-emojis'); const upgEmojis = document.getElementById('upg-emojis');
upgEmojis.style.display = 'block'; upgEmojis.style.display = 'block';
for (let i = 0; i < count; i++) {
setTimeout(() => {
const emoji = document.createElement('span'); const emoji = document.createElement('span');
emoji.innerText = getRandomEmoji(); emoji.innerText = getRandomEmoji();
emoji.className = 'upg-emojis'; emoji.className = 'upg-emojis';
setTimeout(() => {
upgEmojis.append(emoji); upgEmojis.append(emoji);
}, Math.random() * 1000);
setInterval(() => { setInterval(() => {
mood += Math.floor(Math.random() * 1000); mood += Math.floor(Math.random() * 1000) * multiplier;
emoji.innerText = getRandomEmoji(); emoji.innerText = getRandomEmoji();
updateMoodCounter(); updateMoodCounter();
if (purchasedUpgrades.includes('multiplier')) {
multiplier += 0.1;
upgMultiplier.innerText = 'Multiplier: x' + multiplier.toFixed(1);
}
}, 5000); }, 5000);
}, Math.floor(Math.random() * 4000) + 1000);
}
} }
// rain // rain
@ -233,6 +250,7 @@ function showCuteface() {
const cuteface = document.getElementById('upg-cuteface'); const cuteface = document.getElementById('upg-cuteface');
cuteface.style.visibility = 'visible'; cuteface.style.visibility = 'visible';
document.body.style.backgroundColor = '#93560e'; document.body.style.backgroundColor = '#93560e';
moodPerClick += 600;
} }
// credits // credits
@ -245,12 +263,20 @@ function showCredits() {
// cursor // cursor
function enableCursor() { function enableCursor() {
moodPerClick += 800;
var allElements = document.querySelectorAll('body, .btn, .click-btn'); var allElements = document.querySelectorAll('body, .btn, .click-btn');
for (var i = 0; i < allElements.length; i++) { for (var i = 0; i < allElements.length; i++) {
allElements[i].style.cursor = 'url("./assets/img/cursors/cursor.png"), auto'; allElements[i].style.cursor = 'url("./assets/img/cursors/cursor.png"), auto';
} }
} }
// multiplier
function enableMultiplier() {
const upgMultiplier = document.getElementById('upg-multiplier');
upgMultiplier.style.display = 'block';
}
let upgrades = [ let upgrades = [
{ {
@ -291,7 +317,7 @@ let upgrades = [
description: 'Let the emojis flyyyyyyy-- and get some more mood', description: 'Let the emojis flyyyyyyy-- and get some more mood',
image: '../assets/img/upgrades/emojis2.png', image: '../assets/img/upgrades/emojis2.png',
cost: 1500, cost: 1500,
onPurchase: addEmoji, onPurchase: () => addEmoji(5),
}, },
{ {
id: 'calm_music', id: 'calm_music',
@ -304,7 +330,7 @@ let upgrades = [
{ {
id: 'cursor', id: 'cursor',
name: 'Cursor', name: 'Cursor',
description: 'Click Clack. +400 mood/click', description: 'Click Clack. +800 mood/click',
image: '../assets/img/upgrades/cursor.png', image: '../assets/img/upgrades/cursor.png',
cost: 4000, cost: 4000,
onPurchase: enableCursor, onPurchase: enableCursor,
@ -314,7 +340,7 @@ let upgrades = [
name: 'Mixer', name: 'Mixer',
description: 'Control the sounds', description: 'Control the sounds',
image: '../assets/img/upgrades/mixer.png', image: '../assets/img/upgrades/mixer.png',
cost: 4500, cost: 50000,
onPurchase: enableMixer, onPurchase: enableMixer,
}, },
{ {
@ -322,15 +348,31 @@ let upgrades = [
name: 'Cuteface', name: 'Cuteface',
description: 'A little bit... unusual background... no?..', description: 'A little bit... unusual background... no?..',
image: '../assets/img/upgrades/cuteface.png', image: '../assets/img/upgrades/cuteface.png',
cost: 8000, cost: 80000,
onPurchase: showCuteface, onPurchase: showCuteface,
}, },
{
id: 'emojis3',
name: 'Even More Emoji Thrusters',
description: 'mayhem but more mood',
image: '../assets/img/upgrades/emojis3.png',
cost: 100000,
onPurchase: () => addEmoji(20),
},
{
id: 'multiplier',
name: 'Mood Multiplier',
description: 'Even more mood with time',
image: '../assets/img/upgrades/multiplier.png',
cost: 300000,
onPurchase: enableMultiplier,
},
{ {
id: 'credits', id: 'credits',
name: 'Credits', name: 'The End',
description: 'Congratulations!', description: 'it\'s alpha',
image: '../assets/img/upgrades/credits.png', image: '../assets/img/upgrades/credits.png',
cost: 1, cost: 15000000,
onPurchase: showCredits, onPurchase: showCredits,
}, },
]; ];