User prompt
ayarlarda herhangi bir şey kaydedildikten sonra bu oyunun hafızasına kaydedilsin. oyun kapansa bile o ayar sabit kalsın ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Redesign the BPM control in the settings menu as follows: - Display the BPM value inside a circular UI element. - Remove the '+' and '–' buttons entirely. - When the user taps and holds on the circle and drags **upwards**, increase the BPM by 5 per threshold. - When the user drags **downwards**, decrease the BPM by 5 per threshold. - Implement smooth vertical dragging behavior, with step-based change (e.g., every 20px = 5 BPM). - Make sure the BPM value updates in real-time as the user drags. - Keep the design minimalist and suitable for a pixel art rhythm game UI. This should support mobile touch input — handle touchstart, touchmove, and touchend events to update the BPM smoothly.
User prompt
menüleri kapatmak için sağ alta kapat butonu ekle
User prompt
The BPM adjustment feature in the settings menu is currently not working — clicking the '+' or '–' buttons does not change the BPM value. Please fix this functionality, and redesign the BPM display as a circular UI element: - The BPM value should be displayed inside a circle. - '+' and '–' buttons should be placed on the left and right sides of the circle. - The entire BPM control should be toggleable (click to open/close). - Make sure button presses increment or decrement the BPM value correctly. - Use minimal and readable design logic suitable for pixel art UI.
User prompt
settings, credits ve support us butonlarına basıldığında ana menüden çıkılıp basılan butonun menüsüne geç
User prompt
Please fix the bug: 'Uncaught ReferenceError: overlayContainer is not defined' in or related to this line: 'overlayContainer.visible = false;' Line Number: 416
User prompt
settingsmenu, creditsmenu, supportmenu adında 3 ayrı yer oluştur. butonlara basıldığında anamenuden bağımsız yeni menüler açılsın.
User prompt
bpm ayarlanabilir olsun. ayarlar menüsünde BPM ayarı olsun. bpm ayarı güncellenince oyun ekranındaki kick vuruşları da bpm ile bağlantılı şekilde olsun
User prompt
ana menü start menüsüne bastıktan sonra açılan oyun ekranından bağımsız olsun. oyun esnasındaki görüntüler gamescreen adı altında olsun
User prompt
oyun arkaplanını isyeri asseti ile değiştir.
Code edit (1 edits merged)
Please save this source code
User prompt
oyuna bir ana menü ekleyelim, ana menüde başla, ayarlar, credits ve support us butonları ekle
User prompt
ok, good, awesome ve perfect gibi belirli zaman aralıklarına göre ne kadar kusursuz bir bass basıldıysa ona göre bir geribildirim versin
Code edit (1 edits merged)
Please save this source code
User prompt
DJ Bass Kickstart
Initial prompt
bir müzik oyunu. oyunda biz bir DJ'iz ancak henüz amatörüz. ilk bulduğumuz mekanda çalışıyoruz ve ilk işimiz bass drum basmak
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { bpm: 100 }); /**** * Classes ****/ // default bpm 100 // Beat marker class (moving dot) var BeatMarker = Container.expand(function () { var self = Container.call(this); var marker = self.attachAsset('beatMarker', { anchorX: 0.5, anchorY: 0.5 }); self.active = true; // Whether this beat is still hittable self.hit = false; // Whether this beat was hit // For feedback animation self.showFeedback = function (type) { var feedbackId = type === 'good' ? 'goodCircle' : 'missCircle'; var feedback = LK.getAsset(feedbackId, { anchorX: 0.5, anchorY: 0.5, x: self.x, y: self.y, alpha: 0.7, scaleX: 1, scaleY: 1 }); game.addChild(feedback); tween(feedback, { alpha: 0, scaleX: 1.5, scaleY: 1.5 }, { duration: 400, easing: tween.easeOut, onFinish: function onFinish() { feedback.destroy(); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181818 }); /**** * Game Code ****/ // --- Game constants --- // Bass drum (kick) hit circle // Bass drum (kick) hit circle when active // Timeline bar // Beat marker // Miss feedback // Good feedback // Sound for kick // Music (looping, short demo) var TIMELINE_WIDTH = 1200; var TIMELINE_HEIGHT = 24; var TIMELINE_Y = 2000; // Y position of timeline bar var TIMELINE_X = (2048 - TIMELINE_WIDTH) / 2; var HIT_ZONE_X = 2048 / 2; // Center of screen var HIT_ZONE_Y = TIMELINE_Y + TIMELINE_HEIGHT / 2; var HIT_WINDOW = 120; // px distance for perfect hit var BEAT_SPEED = 900; // px/sec, will increase with difficulty var INITIAL_BPM = 100; // Starting BPM var BEATS_PER_MEASURE = 4; var BEAT_INTERVAL = 60 / INITIAL_BPM; // seconds per beat var DIFFICULTY_STEP = 0.15; // How much to increase BPM per level var MAX_MISSES = 5; // --- Game state --- var beats = []; // Active BeatMarker objects var beatPattern = []; // Array of {time, type} var nextBeatIdx = 0; // Next beat to spawn var songTime = 0; // Elapsed time in seconds var lastTickTime = Date.now(); var score = 0; var misses = 0; var combo = 0; var bpm = typeof storage.bpm === "number" ? storage.bpm : INITIAL_BPM; var beatInterval = 60 / bpm; var gameActive = true; var feedbackTimeout = null; // --- UI elements --- // --- Gameplay Screen Container --- var gamescreen = new Container(); gamescreen.visible = false; game.addChild(gamescreen); // Add isyeri background image, anchored top-left, covering the whole game area var isyeriBg = LK.getAsset('isyeri', { anchorX: 0, anchorY: 0, x: 0, y: 0, width: 2048, height: 2732 }); gamescreen.addChild(isyeriBg); var timelineBar = LK.getAsset('timelineBar', { anchorX: 0, anchorY: 0.5, x: TIMELINE_X, y: TIMELINE_Y + TIMELINE_HEIGHT / 2 }); gamescreen.addChild(timelineBar); // Hit zone (kick target) var kickTarget = LK.getAsset('kickTarget', { anchorX: 0.5, anchorY: 0.5, x: HIT_ZONE_X, y: HIT_ZONE_Y }); gamescreen.addChild(kickTarget); // Score text var scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Combo text var comboTxt = new Text2('', { size: 70, fill: 0x00FF00 }); comboTxt.anchor.set(0.5, 0); LK.gui.top.addChild(comboTxt); comboTxt.y = 120; // Misses text var missTxt = new Text2('', { size: 70, fill: 0xFF4444 }); missTxt.anchor.set(0.5, 0); LK.gui.top.addChild(missTxt); missTxt.y = 200; // --- Beat pattern generation --- function generateBeatPattern(bpm, measures) { // Simple: 4/4, kick on every beat, can add more complex patterns later var pattern = []; var interval = 60 / bpm; for (var m = 0; m < measures; m++) { for (var b = 0; b < BEATS_PER_MEASURE; b++) { pattern.push({ time: (m * BEATS_PER_MEASURE + b) * interval, type: 'kick' }); } } return pattern; } // --- Start game --- function startGame() { // Reset state for (var i = 0; i < beats.length; i++) { beats[i].destroy(); } beats = []; // Use current bpm and beatInterval beatInterval = 60 / bpm; beatPattern = generateBeatPattern(bpm, 16); // 16 measures = 64 beats nextBeatIdx = 0; songTime = 0; lastTickTime = Date.now(); score = 0; misses = 0; combo = 0; gameActive = true; scoreTxt.setText('0'); comboTxt.setText(''); missTxt.setText(''); kickTarget.visible = true; LK.setScore(0); LK.playMusic('bgmusic', { loop: true }); } // --- Main Menu Implementation --- var mainMenuContainer = new Container(); mainMenuContainer.visible = true; // Title var titleTxt = new Text2("DJ Bass Kickstart", { size: 160, fill: 0xffd700 }); titleTxt.anchor.set(0.5, 0); titleTxt.x = 2048 / 2; titleTxt.y = 300; mainMenuContainer.addChild(titleTxt); // Start Button var startBtn = new Text2("START", { size: 120, fill: 0x00ff00 }); startBtn.anchor.set(0.5, 0.5); startBtn.x = 2048 / 2; startBtn.y = 700; mainMenuContainer.addChild(startBtn); // Settings Button var settingsBtn = new Text2("SETTINGS", { size: 100, fill: 0x1e90ff }); settingsBtn.anchor.set(0.5, 0.5); settingsBtn.x = 2048 / 2; settingsBtn.y = 900; mainMenuContainer.addChild(settingsBtn); // Credits Button var creditsBtn = new Text2("CREDITS", { size: 100, fill: 0xffffff }); creditsBtn.anchor.set(0.5, 0.5); creditsBtn.x = 2048 / 2; creditsBtn.y = 1050; mainMenuContainer.addChild(creditsBtn); // Support Us Button var supportBtn = new Text2("SUPPORT US", { size: 100, fill: 0xff4444 }); supportBtn.anchor.set(0.5, 0.5); supportBtn.x = 2048 / 2; supportBtn.y = 1200; mainMenuContainer.addChild(supportBtn); // Overlay for credits/settings/support var settingsmenu = new Container(); settingsmenu.visible = false; game.addChild(settingsmenu); var creditsmenu = new Container(); creditsmenu.visible = false; game.addChild(creditsmenu); var supportmenu = new Container(); supportmenu.visible = false; game.addChild(supportmenu); // Helper to hide all overlays function hideAllMenus() { settingsmenu.visible = false; creditsmenu.visible = false; supportmenu.visible = false; } // Show credits menu function showCreditsMenu() { hideAllMenus(); creditsmenu.removeChildren(); var bg = LK.getAsset('missCircle', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2, scaleX: 5, scaleY: 2.5, alpha: 0.92 }); creditsmenu.addChild(bg); var txt = new Text2("Credits\nTasarım & Kod: FRVR.Ava.Combo[POGAAS].v1.0\nInspired by Ada Lovelace", { size: 90, fill: 0xffffff }); txt.anchor.set(0.5, 0.5); txt.x = 2048 / 2; txt.y = 2732 / 2; creditsmenu.addChild(txt); // Close button (bottom right) var closeBtn = new Text2("KAPAT", { size: 90, fill: 0xffffff }); closeBtn.anchor.set(1, 1); closeBtn.x = 2048 - 60; closeBtn.y = 2732 - 60; creditsmenu.addChild(closeBtn); closeBtn.down = function (x, y, obj) { creditsmenu.visible = false; mainMenuContainer.visible = true; }; creditsmenu.visible = true; // Remove tap-to-close on background creditsmenu.down = undefined; } // Show support menu function showSupportMenu() { hideAllMenus(); supportmenu.removeChildren(); var bg = LK.getAsset('missCircle', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2, scaleX: 5, scaleY: 2.5, alpha: 0.92 }); supportmenu.addChild(bg); var txt = new Text2("Support Us\nBizi desteklemek için sosyal medyada paylaşın!", { size: 90, fill: 0xffffff }); txt.anchor.set(0.5, 0.5); txt.x = 2048 / 2; txt.y = 2732 / 2; supportmenu.addChild(txt); // Close button (bottom right) var closeBtn = new Text2("KAPAT", { size: 90, fill: 0xffffff }); closeBtn.anchor.set(1, 1); closeBtn.x = 2048 - 60; closeBtn.y = 2732 - 60; supportmenu.addChild(closeBtn); closeBtn.down = function (x, y, obj) { supportmenu.visible = false; mainMenuContainer.visible = true; }; supportmenu.visible = true; // Remove tap-to-close on background supportmenu.down = undefined; } // Show settings menu function showSettingsMenu() { hideAllMenus(); settingsmenu.removeChildren(); var bg = LK.getAsset('missCircle', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2, scaleX: 5, scaleY: 2.5, alpha: 0.92 }); settingsmenu.addChild(bg); var txt = new Text2("Ayarlar", { size: 110, fill: 0xffffff }); txt.anchor.set(0.5, 0.5); txt.x = 2048 / 2; txt.y = 700; settingsmenu.addChild(txt); // --- BPM CIRCLE UI --- // Container for the whole BPM control var bpmCircleContainer = new Container(); bpmCircleContainer.x = 2048 / 2; bpmCircleContainer.y = 1100; settingsmenu.addChild(bpmCircleContainer); // Circle background var bpmCircleBg = LK.getAsset('kickTarget', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 0, scaleX: 1.1, scaleY: 1.1, alpha: 0.85 }); bpmCircleContainer.addChild(bpmCircleBg); // BPM value text var bpmValueTxt = new Text2(bpm + "", { size: 110, fill: 0x1e90ff }); bpmValueTxt.anchor.set(0.5, 0.5); bpmValueTxt.x = 0; bpmValueTxt.y = 0; bpmCircleContainer.addChild(bpmValueTxt); // BPM label text var bpmLabelTxt = new Text2("BPM", { size: 48, fill: 0xffffff }); bpmLabelTxt.anchor.set(0.5, 0.5); bpmLabelTxt.x = 0; bpmLabelTxt.y = 90; bpmCircleContainer.addChild(bpmLabelTxt); // --- Drag-to-change BPM logic --- var dragActive = false; var dragStartY = 0; var dragStartBpm = 0; var lastDragStep = 0; var BPM_MIN = 40; var BPM_MAX = 300; var BPM_STEP = 5; var PIXELS_PER_STEP = 20; // Touch start (down) on circle bpmCircleContainer.down = function (x, y, obj) { dragActive = true; dragStartY = y; dragStartBpm = bpm; lastDragStep = 0; // Animate circle slightly for feedback tween(bpmCircleBg, { scaleX: 1.18, scaleY: 1.18 }, { duration: 100, yoyo: true, repeat: 1 }); }; // Touch move on circle bpmCircleContainer.move = function (x, y, obj) { if (!dragActive) return; var dy = dragStartY - y; // Up is positive var step = Math.floor(dy / PIXELS_PER_STEP); if (step !== lastDragStep) { var newBpm = dragStartBpm + step * BPM_STEP; if (newBpm < BPM_MIN) newBpm = BPM_MIN; if (newBpm > BPM_MAX) newBpm = BPM_MAX; if (newBpm !== bpm) { bpm = newBpm; bpmValueTxt.setText(bpm + ""); beatInterval = 60 / bpm; storage.bpm = bpm; // persist bpm to storage } lastDragStep = step; } }; // Touch end (up) on circle bpmCircleContainer.up = function (x, y, obj) { dragActive = false; // Animate back to normal scale tween(bpmCircleBg, { scaleX: 1.1, scaleY: 1.1 }, { duration: 100 }); }; // Close button (bottom right) var closeBtn = new Text2("KAPAT", { size: 90, fill: 0xffffff }); closeBtn.anchor.set(1, 1); closeBtn.x = 2048 - 60; closeBtn.y = 2732 - 60; settingsmenu.addChild(closeBtn); closeBtn.down = function (x, y, obj) { settingsmenu.visible = false; mainMenuContainer.visible = true; }; // Remove tap-to-close on background settingsmenu.down = undefined; settingsmenu.visible = true; } // Button event handlers startBtn.down = function (x, y, obj) { mainMenuContainer.visible = false; startGame(); }; settingsBtn.down = function (x, y, obj) { mainMenuContainer.visible = false; showSettingsMenu(); }; creditsBtn.down = function (x, y, obj) { mainMenuContainer.visible = false; showCreditsMenu(); }; supportBtn.down = function (x, y, obj) { mainMenuContainer.visible = false; showSupportMenu(); }; // Add menu to game game.addChild(mainMenuContainer); // menus are already added above // Hide all gameplay UI until game starts scoreTxt.visible = false; comboTxt.visible = false; missTxt.visible = false; // timelineBar and kickTarget are now children of gamescreen, so their visibility is managed by gamescreen // Patch startGame to show gameplay UI and gamescreen var _originalStartGame = startGame; startGame = function startGame() { scoreTxt.visible = true; comboTxt.visible = true; missTxt.visible = true; gamescreen.visible = true; mainMenuContainer.visible = false; // overlayContainer.visible = false; // Removed, not defined _originalStartGame(); }; // On menu, hide gameplay UI and gamescreen mainMenuContainer.visible = true; scoreTxt.visible = false; comboTxt.visible = false; missTxt.visible = false; gamescreen.visible = false; // --- Beat spawning --- function spawnBeat(beat) { var marker = new BeatMarker(); // Start at left edge of timeline, move right to hit zone marker.x = TIMELINE_X; marker.y = HIT_ZONE_Y; marker.beatTime = beat.time; marker.type = beat.type; marker.active = true; marker.hit = false; beats.push(marker); gamescreen.addChild(marker); } // --- Game update --- game.update = function () { if (!gameActive) { return; } // Time management var now = Date.now(); var dt = (now - lastTickTime) / 1000; lastTickTime = now; songTime += dt; // Spawn new beats if it's time while (nextBeatIdx < beatPattern.length && beatPattern[nextBeatIdx].time - songTime < TIMELINE_WIDTH / BEAT_SPEED) { spawnBeat(beatPattern[nextBeatIdx]); nextBeatIdx++; } // Move beats and check for misses for (var i = beats.length - 1; i >= 0; i--) { var beat = beats[i]; // Calculate progress: 0 (spawn) to 1 (hit zone) var timeToHit = beat.beatTime - songTime; var pxFromStart = TIMELINE_WIDTH * (1 - timeToHit / (TIMELINE_WIDTH / BEAT_SPEED)); beat.x = TIMELINE_X + Math.max(0, Math.min(TIMELINE_WIDTH, pxFromStart)); // Check if passed hit zone (missed) if (!beat.hit && beat.active && Math.abs(beat.x - HIT_ZONE_X) < HIT_WINDOW / 2) { // Still in hit window, do nothing } else if (!beat.hit && beat.active && beat.x > HIT_ZONE_X + HIT_WINDOW) { // Missed beat.active = false; beat.showFeedback('miss'); misses++; combo = 0; missTxt.setText('Miss: ' + misses); comboTxt.setText(''); LK.effects.flashObject(kickTarget, 0xff0000, 200); if (misses >= MAX_MISSES) { gameOver(); } } // Remove if off screen if (beat.x > TIMELINE_X + TIMELINE_WIDTH + 100) { beat.destroy(); beats.splice(i, 1); } } }; // --- Input handling --- var isTouching = false; game.down = function (x, y, obj) { if (!gameActive) { return; } // Only register if touch is in hit zone var dx = x - HIT_ZONE_X; var dy = y - HIT_ZONE_Y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 120) { isTouching = true; // Animate kick target kickTarget.destroy(); kickTarget = LK.getAsset('kickActive', { anchorX: 0.5, anchorY: 0.5, x: HIT_ZONE_X, y: HIT_ZONE_Y }); gamescreen.addChild(kickTarget); // Check for beat hit var hit = false; for (var i = 0; i < beats.length; i++) { var beat = beats[i]; if (beat.active && !beat.hit && Math.abs(beat.x - HIT_ZONE_X) < HIT_WINDOW) { // Calculate timing accuracy var distFromCenter = Math.abs(beat.x - HIT_ZONE_X); var feedbackType = ''; var feedbackText = ''; var feedbackColor = 0xffffff; var scoreAdd = 0; if (distFromCenter < 20) { feedbackType = 'perfect'; feedbackText = 'PERFECT!'; feedbackColor = 0xffe600; scoreAdd = 200; } else if (distFromCenter < 40) { feedbackType = 'awesome'; feedbackText = 'AWESOME!'; feedbackColor = 0x00e6ff; scoreAdd = 150; } else if (distFromCenter < 70) { feedbackType = 'good'; feedbackText = 'GOOD'; feedbackColor = 0x00ff00; scoreAdd = 100; } else { feedbackType = 'ok'; feedbackText = 'OK'; feedbackColor = 0xcccccc; scoreAdd = 50; } beat.hit = true; beat.active = false; hit = true; score += scoreAdd; combo += 1; LK.setScore(score); scoreTxt.setText(score); comboTxt.setText('Combo: ' + combo); // Show feedback text at hit zone var feedbackTxt = new Text2(feedbackText, { size: 120, fill: feedbackColor }); feedbackTxt.anchor.set(0.5, 0.5); feedbackTxt.x = HIT_ZONE_X; feedbackTxt.y = HIT_ZONE_Y - 180; game.addChild(feedbackTxt); tween(feedbackTxt, { alpha: 0, y: feedbackTxt.y - 100 }, { duration: 600, easing: tween.easeOut, onFinish: function onFinish() { feedbackTxt.destroy(); } }); beat.showFeedback('good'); LK.getSound('kick').play(); LK.effects.flashObject(kickTarget, feedbackColor, 200); // Difficulty up every 10 combo if (combo % 10 === 0 && combo > 0) { bpm += 8; if (bpm > 300) bpm = 300; beatInterval = 60 / bpm; // Add more beats to pattern var extra = generateBeatPattern(bpm, 4); for (var j = 0; j < extra.length; j++) { extra[j].time += beatPattern[beatPattern.length - 1].time + beatInterval; beatPattern.push(extra[j]); } } break; } } if (!hit) { // Missed (tapped at wrong time) misses++; combo = 0; missTxt.setText('Miss: ' + misses); comboTxt.setText(''); LK.effects.flashObject(kickTarget, 0xff0000, 200); if (misses >= MAX_MISSES) { gameOver(); } } } }; game.up = function (x, y, obj) { isTouching = false; // Restore kick target kickTarget.destroy(); kickTarget = LK.getAsset('kickTarget', { anchorX: 0.5, anchorY: 0.5, x: HIT_ZONE_X, y: HIT_ZONE_Y }); gamescreen.addChild(kickTarget); }; // --- Game over --- function gameOver() { gameActive = false; LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); LK.stopMusic(); } // --- Win condition --- function checkWin() { if (score >= 5000) { gameActive = false; LK.effects.flashScreen(0x00ff00, 800); LK.showYouWin(); LK.stopMusic(); } } // --- Restart on game over --- LK.on('gameover', function () { startGame(); }); LK.on('youwin', function () { startGame(); });
===================================================================
--- original.js
+++ change.js
@@ -1,12 +1,16 @@
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1", {
+ bpm: 100
+});
/****
* Classes
****/
+// default bpm 100
// Beat marker class (moving dot)
var BeatMarker = Container.expand(function () {
var self = Container.call(this);
var marker = self.attachAsset('beatMarker', {
@@ -83,10 +87,10 @@
var lastTickTime = Date.now();
var score = 0;
var misses = 0;
var combo = 0;
-var bpm = INITIAL_BPM;
-var beatInterval = BEAT_INTERVAL;
+var bpm = typeof storage.bpm === "number" ? storage.bpm : INITIAL_BPM;
+var beatInterval = 60 / bpm;
var gameActive = true;
var feedbackTimeout = null;
// --- UI elements ---
// --- Gameplay Screen Container ---
@@ -418,8 +422,9 @@
if (newBpm !== bpm) {
bpm = newBpm;
bpmValueTxt.setText(bpm + "");
beatInterval = 60 / bpm;
+ storage.bpm = bpm; // persist bpm to storage
}
lastDragStep = step;
}
};
empty heart
A 2048x2732 vertical pixel art background for the main menu of a rhythm game. The scene shows a moody, neon-lit cityscape at night through a big window behind a cozy, minimal DJ setup. The foreground includes soft lights, vinyl records, and glowing cables. Background buildings feature soft pulsing lights and pixel-style clouds or stars. The mood is dreamy, lo-fi, and rhythmic, with purple, indigo, and cyan tones. No characters or text, just a calm and stylish menu background.. In-Game asset. 2d. High contrast. No shadows
A 2048x2732 vertical pixel art background for a settings screen in a pixel-art rhythm game. The scene shows a cozy side corner of the same DJ studio seen in the main menu, with shelves full of vinyls, tangled audio cables, studio monitors, and an analog BPM dial glowing softly. A small desk lamp casts a warm light over a notepad and some buttons. The lighting is purple and blue, calm and focused. The mood is quiet, technical, and slightly futuristic — perfect for adjusting settings.. In-Game asset. 2d. High contrast. No shadows
A 2048x2732 vertical pixel art background for a credits screen in a rhythm-based pixel art game. The scene shows a cozy wall in the same neon-lit DJ studio, filled with pinned polaroid photos, signed posters, music flyers, sticky notes, and handwritten thank-you notes. Soft glowing fairy lights hang above. The lighting is soft pink, violet and blue, with a nostalgic, emotional, and heartfelt vibe. No characters or UI — just a decorative wall filled with creative memories and gratitude.. In-Game asset. 2d. High contrast. No shadows
A single rectangular pixel art button labeled “Start” in a purple neon tone, designed for a lo-fi rhythm-based pixel art game. The button has soft glowing edges, a subtle pixel shadow, and a clean 1-bit pixel font. The overall mood is cozy and dreamy, matching a neon-lit DJ studio aesthetic. The background should be transparent.. In-Game asset. 2d. High contrast. No shadows
Write SETTINGS instead of START.
Write CREDITS instead of START.
Write SUPPORT US instead of SETTINGS.
A bold and stylish pixel art logo text for the game title “DJ RHYTHMCOLIC” designed for a lo-fi rhythm pixel art game. The text is large, vibrant purple with neon glow effects, featuring a retro pixel font that looks futuristic and energetic. Behind the text, subtle pixelated neon sound waves and small music notes float gently in purple and blue hues, blending with a cozy DJ studio atmosphere. The background is transparent or very dark to highlight the glowing title. The style matches a dreamy, neon-lit nighttime vibe with pixel-perfect detail.. In-Game asset. 2d. High contrast. No shadows
yellow ball pixel-art. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
A minimalist horizontal pixel art timeline bar, 2048x40 resolution, designed for a lo-fi rhythm pixel game. The bar is sleek and thin, with subtle purple and violet tones, no numbers or markers. The style is consistent with a DJ-themed interface — soft glowing edges, pixel-perfect precision, and no background (transparent). The bar should feel modern yet retro, fitting into a dreamy neon-lit rhythm game UI.. In-Game asset. 2d. High contrast. No shadows
A pixel art arrow starting from a glowing "TAP" label in retro pixel font, pointing diagonally from the bottom right toward the upper left, as if guiding the player to tap that area. The arrow is sleek, with a smooth curve or angled segments, styled in purple or violet neon tones with a soft glow effect. The design matches a lo-fi rhythm game aesthetic. The "TAP" label is positioned at the tail of the arrow and glows subtly. No background — transparent.. In-Game asset. 2d. High contrast. No shadows
A pixel art button with the word "READY" written in bold, retro pixel font. The button is rectangular with slightly rounded corners, styled in purple and violet tones with a soft glowing border to match a lo-fi rhythm game's aesthetic. The "READY" text is centered, white or light-colored for contrast, with pixel-perfect sharpness. The button has a slightly raised 3D appearance and no background (transparent). Designed for use in a minimalist, neon-themed rhythm game UI.. In-Game asset. 2d. High contrast. No shadows
A cozy pixel art bar interior viewed from the DJ's perspective. A dimly lit, moody atmosphere with purple and deep blue neon tones. Visible DJ desk with mixer and speakers in the foreground, blurred bar counter and patrons in the background. Small glowing lights, bottles on shelves, soft lighting, and retro vibes. Resolution: 2048x2732. No characters in front, focus on ambiance and depth.. In-Game asset. 2d. High contrast. No shadows
pixel-art purple heart. In-Game asset. 2d. High contrast. No shadows
heart with blue shield
A transparent background pixel art UI table showing game credits. Each credit line is inside a separate softly glowing purple pixel-style rectangular box. Pixel font text is centered in each box and reads: "Credits" "Tasarım & Kod: FRVR.Ava.Combo[POGAAS].v1.0" "Inspired by Ada Lovelace" "Prompt Engineering by cielique" No background or shadows. Only the pixel table with glowing boxes and readable pixel-style text. Maintain a clean, retro-modern design suitable for overlaying on a DJ bar scene. Resolution: 2048x2732, vertically aligned.. In-Game asset. 2d. High contrast. No shadows
A transparent background pixel art UI panel with "Support Us" title and a list of support actions. Each action is inside a separate glowing purple pixel-style rectangular box. Centered pixel font for text. The boxes are aligned vertically, styled like a clean UI overlay, no background or shadows. Resolution: 2048x2732. Text inside each box: "Support Us" "→ Upvote the game" "→ Share with your friends" "→ Leave a comment" "→ Send us your ideas" The overall design should feel fun, inviting, and in harmony with a DJ rhythm game's UI theme.. In-Game asset. 2d. High contrast. No shadows
A 2048x2732 vertical pixel art background for a “Support Us” screen in a rhythm-based pixel art game. The scene continues the cozy neon-lit DJ room theme from the main menu, but zooms in slightly on the desk. A pixel-art tip jar labeled “Thank you!”, a laptop covered in music-themed stickers, coffee mugs, and glowing synth equipment are visible. Lighting remains dreamy and lo-fi with purples and soft blues. The mood feels warm, humble, and inviting. No characters or text — just the environment.. In-Game asset. 2d. High contrast. No shadows. In-Game asset. 2d. High contrast. No shadows
Pixel art “Try Again” button, retro arcade style, purple tones, soft shadows, chunky text, fits rhythm game UI.. In-Game asset. 2d. High contrast. No shadows
change text with MAIN MENU
Pixel art “Game Over” text, bold retro arcade style, purple tones, glitch-free, clean and dramatic for rhythm game UI.. In-Game asset. 2d. High contrast. No shadows
Pixel art background, 2048x2732 resolution, defeat screen for a rhythm game set in a moody bar. Dim lighting, purple and dark tones, empty DJ booth, quiet atmosphere, no characters or text.. In-Game asset. 2d. High contrast. No shadows
orange
CLOSE
purple
daha koyu mor ve köşeler daha yuvarlak
soft edge square, violet purple, pixel art. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Pixel art tutorial table UI, clean layout with text blocks, purple-themed, 8-bit retro style, no background, no icons, fits game start screen "[How to Play] • Tap the button in time with the rhythm! • Earn points and combos by staying on beat. • Want to change speed or volume? → Check out the Settings menu for BPM & sound options. Get ready to groove!". In-Game asset. 2d. High contrast. No shadows
Pixel art pause button, purple color, rounded corners, 8-bit UI style, minimal design, no background, 80x80 size, suitable for mobile rhythm game interface. In-Game asset. 2d. High contrast. No shadows
A minimalist pixel art "Paused" menu screen in vertical format (2048x2732), with a retro DJ/bar theme. At the top center, the word "PAUSED" in large, glowing purple pixel letters. The rest of the screen should be clean and dark, with subtle lighting or atmospheric effects suggesting a nightclub or DJ booth. Leave the central and lower space empty for placing UI buttons (Resume, Restart, Settings, Main Menu). Smooth, moody pixel background, matching a futuristic arcade vibe.. In-Game asset. 2d. High contrast. No shadows
change text with RESUME
change text with RESTART
kick
Sound effect
miss
Sound effect
menumusic
Music
75BPMElectricDreams
Music
80BPMNeonNights
Music
85BPMCyberFlow
Music
90BPMDigitalPulse
Music
95BPMFutureBass
Music
100BPMSynthWave
Music
40BPMDeepVibes
Music
45BPMChillWave
Music
50BPMSlowMotion
Music
55BPMDreamscape
Music
60BPMLowKey
Music
65BPMRelaxed
Music
70BPMCalmVibes
Music
105BPMHyperDrive
Music
110BPMTechnoRush
Music
115BPMHighEnergy
Music
120BPMMaximum
Music
scratch
Sound effect
buttonclick
Sound effect
kick2
Sound effect
kick3
Sound effect
kick4
Sound effect
hihat
Sound effect
hihat2
Sound effect
hihat3
Sound effect
hihat4
Sound effect
snareclap
Sound effect
snareclap2
Sound effect
snareclap3
Sound effect
snareclap4
Sound effect
percussion
Sound effect
percussion2
Sound effect
percussion3
Sound effect
percussion4
Sound effect
thanks
Sound effect