User prompt
Ekranı aşağıya doğru indirelim ve büyütelim
User prompt
Daha fazla belirginleşir daha fazla görünsün ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Oyuna bir gem daha ekleyelim bomba görüntüsü oluşsun ve bu bomba görüntüsü ancak 5 gem birleştiği zaman çıksın ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Gemlerin renk tonunu açık yap ve matlaştır ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'Timeout.tick error: bounceGem is not a function' in or related to this line: 'bounceGem(bounceGem);' Line Number: 413 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Daha fazla efetk olsun ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Gemlerin renklerini hafif solgun yap ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Genler yok olduklarında bir patlama efekti ekle partikül olsun ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Eğer eşleştirme olduysa kaybolan gemleri yukarindan aşağıya düşür ve yenilerini getir ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Daha büyük hale getir
User prompt
Oyun alanını ve icersindeki gemleri ekrana tamamen doldur
User prompt
Yer değiştirmeyi birer kare olarak yap eğer birbirinle eşleşmiyorsa geri dönsün ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Yer değiştirmesini kaydırma yap ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Gem Swap Adventure
Initial prompt
Candy crush ve jewel ancient benzeri
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Gem = Container.expand(function (gemType, gridX, gridY) { var self = Container.call(this); self.gemType = gemType; self.gridX = gridX; self.gridY = gridY; self.isAnimating = false; var gemAssets = ['gemRed', 'gemBlue', 'gemGreen', 'gemYellow', 'gemPurple', 'gemOrange', 'gemBomb']; var gemGraphics = self.attachAsset(gemAssets[gemType], { anchorX: 0.5, anchorY: 0.5 }); self.setGridPosition = function (x, y) { self.gridX = x; self.gridY = y; }; self.animateToPosition = function (targetX, targetY, duration, onComplete) { if (!duration) duration = 200; self.isAnimating = true; tween(self, { x: targetX, y: targetY }, { duration: duration, easing: tween.easeOut, onFinish: function onFinish() { self.isAnimating = false; if (onComplete) onComplete(); } }); }; self.destroy = function () { if (self.parent) { self.parent.removeChild(self); } }; return self; }); var Particle = Container.expand(function (x, y, color) { var self = Container.call(this); var particleGraphics = self.attachAsset('particle', { anchorX: 0.5, anchorY: 0.5 }); // Set particle color particleGraphics.tint = color; // Set initial position self.x = x; self.y = y; // Random velocity self.velocityX = (Math.random() - 0.5) * 300; self.velocityY = (Math.random() - 0.5) * 300; self.gravity = 500; self.life = 1.0; self.fadeSpeed = 2.0; self.update = function () { // Update position based on velocity self.x += self.velocityX * (1 / 60); self.y += self.velocityY * (1 / 60); // Apply gravity self.velocityY += self.gravity * (1 / 60); // Fade out over time self.life -= self.fadeSpeed * (1 / 60); self.alpha = Math.max(0, self.life); // Remove when fully faded if (self.life <= 0) { self.destroy(); } }; self.destroy = function () { if (self.parent) { self.parent.removeChild(self); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2C1810 }); /**** * Game Code ****/ var GRID_SIZE = 8; var CELL_SIZE = 200; var BOARD_OFFSET_X = (2048 - GRID_SIZE * CELL_SIZE) / 2; var BOARD_OFFSET_Y = 200; var gameBoard = []; var selectedGem = null; var draggedGem = null; var dragStartPos = null; var isDragging = false; var isSwapping = false; var score = 0; var comboMultiplier = 1; // Create explosion effect at gem position function createExplosion(x, y, gemColor) { var particleCount = 12; var gemColors = [0xd9b3b3, 0xb3b3d9, 0xb3d9b3, 0xd9d9b3, 0xd9b3d9, 0xd9c2aa]; var color = gemColors[gemColor] || 0xffffff; for (var i = 0; i < particleCount; i++) { var particle = new Particle(x, y, color); game.addChild(particle); } } // Add screen shake effect function shakeScreen(intensity, duration) { var originalX = game.x; var originalY = game.y; var shakeTimer = 0; var shakeInterval = LK.setInterval(function () { shakeTimer += 16; var shakeX = (Math.random() - 0.5) * intensity; var shakeY = (Math.random() - 0.5) * intensity; game.x = originalX + shakeX; game.y = originalY + shakeY; if (shakeTimer >= duration) { LK.clearInterval(shakeInterval); game.x = originalX; game.y = originalY; } }, 16); } // Add screen flash effect with color tinting function flashScreenColor(color, duration) { LK.effects.flashScreen(color, duration); } // Handle bomb explosion - clears all gems around the bomb function explodeBomb(bombX, bombY) { var gemsToExplode = []; // Check 3x3 area around bomb for (var dx = -1; dx <= 1; dx++) { for (var dy = -1; dy <= 1; dy++) { var checkX = bombX + dx; var checkY = bombY + dy; if (checkX >= 0 && checkX < GRID_SIZE && checkY >= 0 && checkY < GRID_SIZE) { if (gameBoard[checkX][checkY] && !(checkX === bombX && checkY === bombY)) { gemsToExplode.push(gameBoard[checkX][checkY]); } } } } // Clear the exploded gems for (var i = 0; i < gemsToExplode.length; i++) { var gem = gemsToExplode[i]; createExplosion(gem.x, gem.y, gem.gemType); gameBoard[gem.gridX][gem.gridY] = null; gem.destroy(); } // Add extra effects for bomb explosion shakeScreen(25, 400); flashScreenColor(0xff8800, 500); } // Add gem scaling bounce effect function bounceGem(gem) { tween(gem, { scaleX: 1.3, scaleY: 1.3 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(gem, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100, easing: tween.bounceOut }); } }); } // Create board background var boardBg = game.attachAsset('boardBg', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: BOARD_OFFSET_Y + GRID_SIZE * CELL_SIZE / 2 }); // Create score display var scoreTxt = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); scoreTxt.y = 100; // Initialize empty board function initializeBoard() { gameBoard = []; for (var x = 0; x < GRID_SIZE; x++) { gameBoard[x] = []; for (var y = 0; y < GRID_SIZE; y++) { gameBoard[x][y] = null; } } } // Fill board with random gems function fillBoard() { for (var x = 0; x < GRID_SIZE; x++) { for (var y = 0; y < GRID_SIZE; y++) { if (!gameBoard[x][y]) { var gemType = Math.floor(Math.random() * 6); var gem = new Gem(gemType, x, y); var worldPos = gridToWorld(x, y); gem.x = worldPos.x; gem.y = worldPos.y; gameBoard[x][y] = gem; game.addChild(gem); } } } } // Convert grid coordinates to world coordinates function gridToWorld(gridX, gridY) { return { x: BOARD_OFFSET_X + gridX * CELL_SIZE + CELL_SIZE / 2, y: BOARD_OFFSET_Y + gridY * CELL_SIZE + CELL_SIZE / 2 }; } // Convert world coordinates to grid coordinates function worldToGrid(worldX, worldY) { var gridX = Math.floor((worldX - BOARD_OFFSET_X) / CELL_SIZE); var gridY = Math.floor((worldY - BOARD_OFFSET_Y) / CELL_SIZE); if (gridX < 0 || gridX >= GRID_SIZE || gridY < 0 || gridY >= GRID_SIZE) { return null; } return { x: gridX, y: gridY }; } // Check if two grid positions are adjacent function areAdjacent(pos1, pos2) { var dx = Math.abs(pos1.x - pos2.x); var dy = Math.abs(pos1.y - pos2.y); return dx === 1 && dy === 0 || dx === 0 && dy === 1; } // Check for matches starting at position function checkMatches(startX, startY) { var gem = gameBoard[startX][startY]; if (!gem) return []; var matches = []; var gemType = gem.gemType; // Special handling for bomb gems - they match with any adjacent gem if (gemType === 6) { // Bomb gem explodeBomb(startX, startY); return [gem]; // Return only the bomb itself for clearing } // Check horizontal matches var horizontalMatches = [gem]; // Check left for (var x = startX - 1; x >= 0; x--) { if (gameBoard[x][startY] && gameBoard[x][startY].gemType === gemType) { horizontalMatches.unshift(gameBoard[x][startY]); } else { break; } } // Check right for (var x = startX + 1; x < GRID_SIZE; x++) { if (gameBoard[x][startY] && gameBoard[x][startY].gemType === gemType) { horizontalMatches.push(gameBoard[x][startY]); } else { break; } } if (horizontalMatches.length >= 3) { matches = matches.concat(horizontalMatches); } // Check vertical matches var verticalMatches = [gem]; // Check up for (var y = startY - 1; y >= 0; y--) { if (gameBoard[startX][y] && gameBoard[startX][y].gemType === gemType) { verticalMatches.unshift(gameBoard[startX][y]); } else { break; } } // Check down for (var y = startY + 1; y < GRID_SIZE; y++) { if (gameBoard[startX][y] && gameBoard[startX][y].gemType === gemType) { verticalMatches.push(gameBoard[startX][y]); } else { break; } } if (verticalMatches.length >= 3) { matches = matches.concat(verticalMatches); } // Remove duplicates var uniqueMatches = []; for (var i = 0; i < matches.length; i++) { var found = false; for (var j = 0; j < uniqueMatches.length; j++) { if (matches[i] === uniqueMatches[j]) { found = true; break; } } if (!found) { uniqueMatches.push(matches[i]); } } return uniqueMatches; } // Find all matches on the board function findAllMatches() { var allMatches = []; var processedGems = []; for (var x = 0; x < GRID_SIZE; x++) { for (var y = 0; y < GRID_SIZE; y++) { if (gameBoard[x][y]) { var matches = checkMatches(x, y); for (var i = 0; i < matches.length; i++) { var gem = matches[i]; var found = false; for (var j = 0; j < processedGems.length; j++) { if (processedGems[j] === gem) { found = true; break; } } if (!found) { allMatches.push(gem); processedGems.push(gem); } } } } } return allMatches; } // Clear matched gems function clearMatches(matches) { if (matches.length === 0) return; LK.getSound('match').play(); var points = matches.length * 10 * comboMultiplier; score += points; scoreTxt.setText('Score: ' + score); // Check if we should create a bomb (5+ gems matched and no bomb in the match) var shouldCreateBomb = matches.length >= 5; var hasBomb = false; var bombPosition = null; for (var i = 0; i < matches.length; i++) { if (matches[i].gemType === 6) { // 6 is bomb type hasBomb = true; break; } } if (shouldCreateBomb && !hasBomb) { // Use the position of the first matched gem for bomb placement bombPosition = { x: matches[0].gridX, y: matches[0].gridY }; } // Enhanced effects based on match size if (matches.length >= 5) { // Large match - intense effects shakeScreen(20, 300); flashScreenColor(0xffffff, 400); } else if (matches.length >= 4) { // Medium match - moderate effects shakeScreen(12, 200); flashScreenColor(0xffff00, 300); } else { // Small match - subtle effects shakeScreen(6, 150); } for (var i = 0; i < matches.length; i++) { var gem = matches[i]; // Add scaling effect before destruction tween(gem, { scaleX: 1.5, scaleY: 1.5, alpha: 0.3 }, { duration: 150, easing: tween.easeIn }); // Create explosion effect at gem position createExplosion(gem.x, gem.y, gem.gemType); gameBoard[gem.gridX][gem.gridY] = null; // Delay gem destruction to allow scaling animation LK.setTimeout(function (destroyGem) { return function () { destroyGem.destroy(); }; }(gem), 150); } // After clearing gems, apply gravity and fill empty spaces LK.setTimeout(function () { var moved = applyGravity(); fillEmptySpaces(); // Place bomb if one should be created if (bombPosition) { var bombGem = new Gem(6, bombPosition.x, bombPosition.y); // 6 is bomb type var worldPos = gridToWorld(bombPosition.x, bombPosition.y); bombGem.x = worldPos.x; bombGem.y = worldPos.y - GRID_SIZE * CELL_SIZE; gameBoard[bombPosition.x][bombPosition.y] = bombGem; game.addChild(bombGem); bombGem.animateToPosition(worldPos.x, worldPos.y, 400); bounceGem(bombGem); } // Check for new matches after falling gems settle LK.setTimeout(function () { var newMatches = findAllMatches(); if (newMatches.length > 0) { comboMultiplier++; clearMatches(newMatches); } else { comboMultiplier = 1; isSwapping = false; } }, 500); }, 200); } // Apply gravity to make gems fall function applyGravity() { var moved = false; for (var x = 0; x < GRID_SIZE; x++) { for (var y = GRID_SIZE - 1; y >= 0; y--) { if (!gameBoard[x][y]) { // Find gem above to fall down for (var searchY = y - 1; searchY >= 0; searchY--) { if (gameBoard[x][searchY]) { var gem = gameBoard[x][searchY]; gameBoard[x][y] = gem; gameBoard[x][searchY] = null; gem.setGridPosition(x, y); var worldPos = gridToWorld(x, y); gem.animateToPosition(worldPos.x, worldPos.y, 300); // Add bounce effect when gem lands LK.setTimeout(function (gemToAnimate) { return function () { bounceGem(gemToAnimate); }; }(gem), 300); moved = true; break; } } } } } return moved; } // Fill empty spaces with new gems function fillEmptySpaces() { for (var x = 0; x < GRID_SIZE; x++) { for (var y = 0; y < GRID_SIZE; y++) { if (!gameBoard[x][y]) { var gemType = Math.floor(Math.random() * 6); var gem = new Gem(gemType, x, y); var worldPos = gridToWorld(x, y); gem.x = worldPos.x; gem.y = worldPos.y - GRID_SIZE * CELL_SIZE; gameBoard[x][y] = gem; game.addChild(gem); gem.animateToPosition(worldPos.x, worldPos.y, 400); // Add bounce effect when new gem lands LK.setTimeout(function (gemToAnimate) { return function () { bounceGem(gemToAnimate); }; }(gem), 400); } } } } // Swap two gems function swapGems(gem1, gem2) { if (isSwapping) return; isSwapping = true; // Store original positions var originalGem1X = gem1.gridX; var originalGem1Y = gem1.gridY; var originalGem2X = gem2.gridX; var originalGem2Y = gem2.gridY; // Update grid positions gem1.setGridPosition(gem2.gridX, gem2.gridY); gem2.setGridPosition(originalGem1X, originalGem1Y); gameBoard[gem1.gridX][gem1.gridY] = gem1; gameBoard[gem2.gridX][gem2.gridY] = gem2; var pos1 = gridToWorld(gem1.gridX, gem1.gridY); var pos2 = gridToWorld(gem2.gridX, gem2.gridY); // Animate the swap gem1.animateToPosition(pos1.x, pos1.y, 200); gem2.animateToPosition(pos2.x, pos2.y, 200); LK.setTimeout(function () { var matches = findAllMatches(); if (matches.length > 0) { // Valid swap - play sound and process matches LK.getSound('swap').play(); clearMatches(matches); } else { // Invalid move - animate back to original positions gem1.setGridPosition(originalGem1X, originalGem1Y); gem2.setGridPosition(originalGem2X, originalGem2Y); gameBoard[gem1.gridX][gem1.gridY] = gem1; gameBoard[gem2.gridX][gem2.gridY] = gem2; var pos1 = gridToWorld(gem1.gridX, gem1.gridY); var pos2 = gridToWorld(gem2.gridX, gem2.gridY); gem1.animateToPosition(pos1.x, pos1.y, 200); gem2.animateToPosition(pos2.x, pos2.y, 200); LK.setTimeout(function () { isSwapping = false; }, 200); } }, 200); } // Game input handling game.down = function (x, y, obj) { if (isSwapping) return; var gridPos = worldToGrid(x, y); if (!gridPos) return; var clickedGem = gameBoard[gridPos.x][gridPos.y]; if (!clickedGem) return; draggedGem = clickedGem; dragStartPos = { x: x, y: y }; isDragging = true; draggedGem.alpha = 0.7; // Add glowing effect to selected gem tween(draggedGem, { tint: 0xffffff }, { duration: 200, easing: tween.easeInOut }); bounceGem(draggedGem); }; game.move = function (x, y, obj) { if (!isDragging || !draggedGem || isSwapping) return; // Calculate drag distance var dragDeltaX = x - dragStartPos.x; var dragDeltaY = y - dragStartPos.y; var dragDistance = Math.sqrt(dragDeltaX * dragDeltaX + dragDeltaY * dragDeltaY); // Only process if drag distance is significant enough if (dragDistance > CELL_SIZE * 0.3) { // Determine drag direction var targetGridX = draggedGem.gridX; var targetGridY = draggedGem.gridY; if (Math.abs(dragDeltaX) > Math.abs(dragDeltaY)) { // Horizontal drag if (dragDeltaX > 0) { targetGridX = Math.min(GRID_SIZE - 1, draggedGem.gridX + 1); } else { targetGridX = Math.max(0, draggedGem.gridX - 1); } } else { // Vertical drag if (dragDeltaY > 0) { targetGridY = Math.min(GRID_SIZE - 1, draggedGem.gridY + 1); } else { targetGridY = Math.max(0, draggedGem.gridY - 1); } } // Update visual position to show intended swap var targetWorldPos = gridToWorld(targetGridX, targetGridY); draggedGem.x = targetWorldPos.x; draggedGem.y = targetWorldPos.y; // Store target position for later use draggedGem.targetGridX = targetGridX; draggedGem.targetGridY = targetGridY; } }; game.up = function (x, y, obj) { if (!isDragging || !draggedGem || isSwapping) return; var startGridPos = { x: draggedGem.gridX, y: draggedGem.gridY }; // Check if we have a target position from dragging if (draggedGem.targetGridX !== undefined && draggedGem.targetGridY !== undefined) { var targetGridPos = { x: draggedGem.targetGridX, y: draggedGem.targetGridY }; // Check if target position is valid and adjacent if (areAdjacent(startGridPos, targetGridPos) && gameBoard[targetGridPos.x][targetGridPos.y]) { var targetGem = gameBoard[targetGridPos.x][targetGridPos.y]; // Attempt swap swapGems(draggedGem, targetGem); } else { // Invalid swap - animate back to original position var worldPos = gridToWorld(draggedGem.gridX, draggedGem.gridY); draggedGem.animateToPosition(worldPos.x, worldPos.y, 200); } // Clean up target position draggedGem.targetGridX = undefined; draggedGem.targetGridY = undefined; } else { // No significant drag - just return to original position var worldPos = gridToWorld(draggedGem.gridX, draggedGem.gridY); draggedGem.animateToPosition(worldPos.x, worldPos.y, 200); } draggedGem.alpha = 1.0; // Reset tint to original color tween.stop(draggedGem, { tint: true }); draggedGem.tint = 0xffffff; draggedGem = null; dragStartPos = null; isDragging = false; }; // Initialize the game initializeBoard(); fillBoard(); // Initial match clearing LK.setTimeout(function () { var matches = findAllMatches(); if (matches.length > 0) { clearMatches(matches); } }, 100); ;
===================================================================
--- original.js
+++ change.js
@@ -11,9 +11,9 @@
self.gemType = gemType;
self.gridX = gridX;
self.gridY = gridY;
self.isAnimating = false;
- var gemAssets = ['gemRed', 'gemBlue', 'gemGreen', 'gemYellow', 'gemPurple', 'gemOrange'];
+ var gemAssets = ['gemRed', 'gemBlue', 'gemGreen', 'gemYellow', 'gemPurple', 'gemOrange', 'gemBomb'];
var gemGraphics = self.attachAsset(gemAssets[gemType], {
anchorX: 0.5,
anchorY: 0.5
});
@@ -135,8 +135,34 @@
// Add screen flash effect with color tinting
function flashScreenColor(color, duration) {
LK.effects.flashScreen(color, duration);
}
+// Handle bomb explosion - clears all gems around the bomb
+function explodeBomb(bombX, bombY) {
+ var gemsToExplode = [];
+ // Check 3x3 area around bomb
+ for (var dx = -1; dx <= 1; dx++) {
+ for (var dy = -1; dy <= 1; dy++) {
+ var checkX = bombX + dx;
+ var checkY = bombY + dy;
+ if (checkX >= 0 && checkX < GRID_SIZE && checkY >= 0 && checkY < GRID_SIZE) {
+ if (gameBoard[checkX][checkY] && !(checkX === bombX && checkY === bombY)) {
+ gemsToExplode.push(gameBoard[checkX][checkY]);
+ }
+ }
+ }
+ }
+ // Clear the exploded gems
+ for (var i = 0; i < gemsToExplode.length; i++) {
+ var gem = gemsToExplode[i];
+ createExplosion(gem.x, gem.y, gem.gemType);
+ gameBoard[gem.gridX][gem.gridY] = null;
+ gem.destroy();
+ }
+ // Add extra effects for bomb explosion
+ shakeScreen(25, 400);
+ flashScreenColor(0xff8800, 500);
+}
// Add gem scaling bounce effect
function bounceGem(gem) {
tween(gem, {
scaleX: 1.3,
@@ -226,8 +252,14 @@
var gem = gameBoard[startX][startY];
if (!gem) return [];
var matches = [];
var gemType = gem.gemType;
+ // Special handling for bomb gems - they match with any adjacent gem
+ if (gemType === 6) {
+ // Bomb gem
+ explodeBomb(startX, startY);
+ return [gem]; // Return only the bomb itself for clearing
+ }
// Check horizontal matches
var horizontalMatches = [gem];
// Check left
for (var x = startX - 1; x >= 0; x--) {
@@ -318,8 +350,26 @@
LK.getSound('match').play();
var points = matches.length * 10 * comboMultiplier;
score += points;
scoreTxt.setText('Score: ' + score);
+ // Check if we should create a bomb (5+ gems matched and no bomb in the match)
+ var shouldCreateBomb = matches.length >= 5;
+ var hasBomb = false;
+ var bombPosition = null;
+ for (var i = 0; i < matches.length; i++) {
+ if (matches[i].gemType === 6) {
+ // 6 is bomb type
+ hasBomb = true;
+ break;
+ }
+ }
+ if (shouldCreateBomb && !hasBomb) {
+ // Use the position of the first matched gem for bomb placement
+ bombPosition = {
+ x: matches[0].gridX,
+ y: matches[0].gridY
+ };
+ }
// Enhanced effects based on match size
if (matches.length >= 5) {
// Large match - intense effects
shakeScreen(20, 300);
@@ -356,8 +406,19 @@
// After clearing gems, apply gravity and fill empty spaces
LK.setTimeout(function () {
var moved = applyGravity();
fillEmptySpaces();
+ // Place bomb if one should be created
+ if (bombPosition) {
+ var bombGem = new Gem(6, bombPosition.x, bombPosition.y); // 6 is bomb type
+ var worldPos = gridToWorld(bombPosition.x, bombPosition.y);
+ bombGem.x = worldPos.x;
+ bombGem.y = worldPos.y - GRID_SIZE * CELL_SIZE;
+ gameBoard[bombPosition.x][bombPosition.y] = bombGem;
+ game.addChild(bombGem);
+ bombGem.animateToPosition(worldPos.x, worldPos.y, 400);
+ bounceGem(bombGem);
+ }
// Check for new matches after falling gems settle
LK.setTimeout(function () {
var newMatches = findAllMatches();
if (newMatches.length > 0) {
Alev spiral parçacık. In-Game asset. 2d. High contrast. No shadows
Su damlası patlama parçacık. In-Game asset. 2d. High contrast. No shadows
Karadelik vortex parçacık spiral. In-Game asset. 2d. High contrast. No shadows
Yeşil yaprak süzülen. In-Game asset. 2d. High contrast. No shadows
Yıldız patlama parlak. In-Game asset. 2d. High contrast. No shadows
Lav topu erimiş. In-Game asset. 2d. High contrast. No shadows
Health bar, grandyan, green,. In-Game asset. 2d. High contrast. No shadows
Hiç birşeye dokunma sadece yeşil olan kısımları kırmızı ile yer değiştir
Bomba şeklinide grandyan ama çizgili rengarenk olsun