Posted June 19, 2025 by SteelCycloneStudios
#3D air hockey #Air Hockey #browser game #devlog #html5 game #game development #velocity puck #menu #javascript #arcade
Hey puck pros! โก In this sixth devlog, weโre introducing powerful updates that improve the onboarding experience, game feel, and customizability. This is our most polished version yet, and hereโs whatโs new!
Gone is the old inline menu—now you get a full character selection screen (#characterSelectionScreen
) after clicking "Single Player" from the main menu.
๐น๏ธ Features:
Preview icons for each paddle type (Classic, Robot, Ninja, Alien).
Hover and click animations.
A clear Start Game button once your pick is locked in.
js document.querySelectorAll('.characterBtn').forEach(btn => { btn.addEventListener('click', function() { document.querySelectorAll('.characterBtn').forEach(b => b.classList.remove('selected')); this.classList.add('selected'); }); });
Upon hitting Start Game, the system hides the selection screen, stores the chosen character, and loads into gameplay:
js document.getElementById('startGameButton').addEventListener('click', function() { ... const selectedCharacter = document.querySelector('.characterBtn.selected').getAttribute('data-character'); updateCharacterStyle(selectedCharacter); gameStarted = true; animate(); });
Weโve introduced two key sound effects:
Hit sound when the puck is struck
Goal sound when a point is scored
Audio levels are customizable in the Options โ Audio menu using sliders.
/hit2.ogg
/goal1.ogg
js document.getElementById('sfxVolume').addEventListener('input', function(e) { const volume = e.target.value / 100; hitSound.volume = volume; goalSound.volume = volume; });
js hitSound.currentTime = 0; hitSound.play().catch(e => console.log("Audio play failed:", e));
For mobile players, vibration feedback (haptics) makes every hit and goal more satisfying.
Wall collisions: vibrate(50)
Paddle strikes: vibrate(100)
Goals: vibrate([100, 50, 200])
js function vibrate(pattern) { if ('vibrate' in navigator) { navigator.vibrate(pattern); } }
This works on supported browsers/devices and falls back silently if unsupported.
Weโve broken Options out into its own clean, full-screen interface.
๐ Inside Options (#optionsScreen
):
Each submenu—like #colorsScreen
and #audioScreen
—is now a standalone screen, keeping things focused and user-friendly.
js document.getElementById('audioButton').addEventListener('click', function() { document.getElementById('optionsScreen').style.display = 'none'; document.getElementById('audioScreen').style.display = 'flex'; });
The new title screen is fully alive with:
Floating pucks & SVG hockey icons
Glow-in-the-dark neon typography
Inspirational hockey quotes on a rotating timer
html <div class="hockey-elements"></div>
js function createPuck() { ... } function createHockeyIcon() { ... }
10 icons and 8 pucks float gently across the screen using:
css @keyframes float { 0%, 100% { transform: translateY(0) rotate(0deg); opacity: 0; } ... }
Quotes rotate every 10 seconds:
js setInterval(rotateQuotes, 10000);
๐ญ Full Character Selection screen
๐ Sound effects for strikes and goals
๐ณ Haptic feedback on mobile (vibration API)
โ๏ธ Clean and separate Options screen
๐ Glowing, animated title screen with floating elements and quotes
Thanks for all your support! Keep sending feedback and tag us if you're playing online! ๐ง
— Jordon McClain
Steel Cyclone Studios ๐ฅ