User prompt
Замедли скорость прицела в полтора раза
User prompt
Враги должны исчезать после уничтожения
User prompt
Замедли падение врагов в два раза
User prompt
Так я понял ручка джойстика появляется в центре но почему-то сразу оказывается в правом нижнем углу при малейшем сдвиге
User prompt
Теперь она начинает движение из правого нижнего угла
User prompt
Проблема в том что ручка джойстика начинает свое движение не из центра базового круга, а из низа. Это нужно исправить
User prompt
Ускорь движение прицела в 2 раза
User prompt
Джойстик должен начинать свое движение из середины чем дальше маленький круг джойстика от центра большого круга тем быстрее движется прицел
User prompt
Прицел должен наносить урон даже когда стоит на месте и им никто не управляет
User prompt
Прицел всегда должен отображаться поверх падающих обьектов
User prompt
Еще раз исправь и сделай больше
User prompt
Переделай джойстик мне не нравится как он работает
User prompt
Исправь джойстик. Он с первого движения ведет прицел вниз. Каждый раз его поиходится поднимать вверх до нейтральной позиции
User prompt
Моленький круг джойстика при первом движении оказывается внизу, из-за жтого прицел сразу едит аниз и так каждый раз, а нужно что бы он был в середине большого коуга
User prompt
Почему-то приджойстик начинает свое движение не из центра а снизу исправь
User prompt
Джойстик не появляется и не работает
User prompt
Джойстик сделай больше и он должен появляться в любом месте куда тыкнет игрок
User prompt
Изменим немного способ нанесения урона. Добавь уэприцел и экранный джойстик для управления прицелом как во многих мобильных игр
User prompt
Удали весь код и сделай новую игру. Суть игры: сверху будут падать различные обьекты а снизу будет город на который они должны упасть и нанести урон городу. Задача игрока не дать упасть предметам на город методом клика на них, можно просто зажать и с определенной периодичностью будет наносится урон. Эти обьекты условно метеориты и инопланетяне. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
КРУГ НЕ СЖИМАЕТСЯ ВО ВРЕМЯ СТОЛКНОВЕНИЯ С КРАЕМ КАРТЫ
User prompt
кружок должен при столкновении вести себя как желе
User prompt
Please fix the bug: 'TypeError: tween.to is not a function' in or related to this line: 'tween.to(self.circleGraphic, squashDuration, {' Line Number: 28
User prompt
Нужно добавить анимацию кругу как будто он мягкий
User prompt
Сотри весь код и напиши новую игру. Игра простая пока так: в центре экрана появляется круг и начинает двигаться в случайном направлении отталкиваясь от края экрана и продолжая двигаться по траэктории
User prompt
как-то медленно он подпрыгивает и длинные паузы делает перед прыжком мне не нравится
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var City = Container.expand(function () { var self = Container.call(this); self.takeDamage = function (damageAmount) { if (self.health <= 0) return; // Already destroyed self.health -= damageAmount; LK.effects.flashObject(self.graphic, 0xFF0000, 300); // Flash city red if (self.healthDisplay) { self.healthDisplay.setText('City Health: ' + Math.max(0, self.health) + ' / ' + CITY_MAX_HEALTH); } if (self.health <= 0) { self.health = 0; // Cap at 0 LK.showGameOver(); // Trigger game over } }; self.setHealthDisplay = function (textObject) { self.healthDisplay = textObject; self.healthDisplay.setText('City Health: ' + self.health + ' / ' + CITY_MAX_HEALTH); }; // Initialization self.graphic = self.attachAsset('city', { anchorX: 0.5, anchorY: 1.0 }); // Anchor bottom-center self.health = CITY_MAX_HEALTH; self.healthDisplay = null; // To be linked to a Text2 object return self; }); var Crosshair = Container.expand(function () { var self = Container.call(this); self.isOver = function (target) { if (!target || !target.graphic || !self.graphic || !target.graphic.width || !target.graphic.height) return false; // Basic bounding box collision var selfHalfWidth = self.graphic.width / 2; var selfHalfHeight = self.graphic.height / 2; var targetHalfWidth = target.graphic.width * (target.graphic.scaleX || 1) / 2; var targetHalfHeight = target.graphic.height * (target.graphic.scaleY || 1) / 2; var selfLeft = self.x - selfHalfWidth; var selfRight = self.x + selfHalfWidth; var selfTop = self.y - selfHalfHeight; var selfBottom = self.y + selfHalfHeight; var targetLeft = target.x - targetHalfWidth; var targetRight = target.x + targetHalfWidth; var targetTop = target.y - targetHalfHeight; var targetBottom = target.y + targetHalfHeight; return !(selfRight < targetLeft || selfLeft > targetRight || selfBottom < targetTop || selfTop > targetBottom); }; // Initialization code, graphic will be attached in Game Code self.graphic = null; self.speed = 0; // Will be set from game constant return self; }); // Base class for falling objects var FallingObject = Container.expand(function (assetId, initialHealth, fallSpeed, objectType) { var self = Container.call(this); self.takeDamage = function (damageAmount) { if (self.isDestroyed) return; self.health -= damageAmount; LK.effects.flashObject(self.graphic, 0xFF0000, 100); // Red flash on hit if (self.health <= 0) { self.destroySelf(); } }; self.destroySelf = function () { if (self.isDestroyed) return; self.isDestroyed = true; // Add a small particle explosion or shrink effect if (tween) { tween.stop(self.graphic); // Stop any ongoing tweens tween(self.graphic, 200, { scaleX: 0.1, scaleY: 0.1, alpha: 0, onComplete: function onComplete() { // Actual removal from game will be handled in game.update } }); } // Points for destroying object LK.setScore(LK.getScore() + (self.objectType === 'meteor' ? 10 : 15)); updateScoreDisplay(); }; self.update = function () { if (self.isDestroyed) return; self.y += self.speedY; }; //{-|u} // Initialization self.graphic = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); self.health = initialHealth; self.maxHealth = initialHealth; // Store max health for potential future use (e.g. health bars on objects) self.speedY = fallSpeed; self.isDestroyed = false; self.objectType = objectType; // 'meteor' or 'alien' return self; }); var Meteor = FallingObject.expand(function () { var self = FallingObject.call(this, 'meteor', METEOR_HEALTH, METEOR_SPEED, 'meteor'); // Meteor-specific properties or methods can be added here return self; }); var Alien = FallingObject.expand(function () { var self = FallingObject.call(this, 'alien', ALIEN_HEALTH, ALIEN_SPEED, 'alien'); // Alien-specific properties or methods (e.g., different movement pattern) return self; }); var VirtualJoystick = Container.expand(function () { var self = Container.call(this); self.initialize = function (baseAssetId, knobAssetId, visualRadius, interactionRadius) { // baseGraphic and knobGraphic are children of 'self' (the joystick container) // Their positions (0,0) will be the center of 'self'. self.baseGraphic = self.addChild(LK.getAsset(baseAssetId, { anchorX: 0.5, anchorY: 0.5 })); self.knobGraphic = self.addChild(LK.getAsset(knobAssetId, { anchorX: 0.5, anchorY: 0.5 })); self.visualRadius = visualRadius; // Max distance knob can move visually self.interactionRadius = interactionRadius; // Touchable area around joystick center self.active = false; self.touchId = null; self.deltaX = 0; // Normalized movement vector x (-1 to 1) self.deltaY = 0; // Normalized movement vector y (-1 to 1) }; self.processDown = function (gameGlobalX, gameGlobalY, eventObj) { // Convert gameGlobalX/Y to coordinates local to the joystick container (self) var localPos = self.toLocal({ x: gameGlobalX, y: gameGlobalY }); var distSq = localPos.x * localPos.x + localPos.y * localPos.y; if (distSq <= self.interactionRadius * self.interactionRadius) { self.active = true; self.touchId = eventObj.identifier; // Use identifier from the event object self.updateKnobPosition(localPos.x, localPos.y); return true; // Consumed event } return false; }; self.processMove = function (gameGlobalX, gameGlobalY, eventObj) { if (!self.active || eventObj.identifier !== undefined && eventObj.identifier !== self.touchId) { return; } var localPos = self.toLocal({ x: gameGlobalX, y: gameGlobalY }); self.updateKnobPosition(localPos.x, localPos.y); }; self.processUp = function (eventObj) { if (!self.active || eventObj.identifier !== undefined && eventObj.identifier !== self.touchId) { return; } self.active = false; self.touchId = null; self.knobGraphic.x = 0; // Reset to center of joystick container self.knobGraphic.y = 0; self.deltaX = 0; self.deltaY = 0; }; self.updateKnobPosition = function (localX, localY) { var dx = localX; var dy = localY; var distance = Math.sqrt(dx * dx + dy * dy); var clampedX = dx; var clampedY = dy; if (distance > self.visualRadius) { clampedX = dx / distance * self.visualRadius; clampedY = dy / distance * self.visualRadius; } self.knobGraphic.x = clampedX; self.knobGraphic.y = clampedY; if (self.visualRadius === 0) { // Avoid division by zero if radius is 0 self.deltaX = 0; self.deltaY = 0; } else { self.deltaX = clampedX / self.visualRadius; self.deltaY = clampedY / self.visualRadius; } self.deltaX = Math.max(-1, Math.min(1, self.deltaX)); self.deltaY = Math.max(-1, Math.min(1, self.deltaY)); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x00001A // Dark deep blue for space }); /**** * Game Code ****/ // A simple red circle for the crosshair // Grey city base // Lime green alien (can be simple box for now) // Brownish meteor // --- Game Constants --- var WORLD_WIDTH = 2048; var WORLD_HEIGHT = 2732; var METEOR_HEALTH = 100; var METEOR_SPEED = 3; // Pixels per frame var METEOR_DAMAGE_TO_CITY = 75; var ALIEN_HEALTH = 150; var ALIEN_SPEED = 2.5; var ALIEN_DAMAGE_TO_CITY = 100; var CITY_MAX_HEALTH = 1000; // var CLICK_DAMAGE = 35; // Replaced by FIRE_DAMAGE // var HOLD_DAMAGE_PER_INTERVAL = 20; // Replaced by FIRE_DAMAGE // var HOLD_DAMAGE_INTERVAL_MS = 150; // Replaced by FIRE_RATE_MS var CROSSHAIR_SPEED = 10; var JOYSTICK_VISUAL_RADIUS = 110; // Max knob center travel distance, adjusted for new asset sizes var JOYSTICK_INTERACTION_RADIUS = 180; // Touchable area radius, scaled with new base size var FIRE_RATE_MS = 150; // How often the player can fire var FIRE_DAMAGE = 35; // Damage per shot from crosshair var SPAWN_INTERVAL_MS_MIN = 1200; // Minimum time between spawns var SPAWN_INTERVAL_MS_MAX = 2500; // Maximum time between spawns // --- Global Game Variables --- var cityInstance; var fallingObjects = []; var cityHealthText; // For GUI var scoreText; // For player score // var playerHoldingTarget = null; // Removed // var isPlayerHolding = false; // Replaced by isFiring // var holdDamageInterval = null; // Removed var crosshairInstance; var joystickInstance; var isFiring = false; var lastFireTime = 0; var joystickTouchId = null; // To track the touch interacting with the joystick var nextSpawnTime = 0; // --- Helper Functions --- function spawnFallingObject() { var objectType = Math.random() < 0.6 ? 'meteor' : 'alien'; // 60% meteors, 40% aliens var newObject; if (objectType === 'meteor') { newObject = new Meteor(); } else { newObject = new Alien(); } // Position just above the screen, at a random horizontal position newObject.x = Math.random() * (WORLD_WIDTH - newObject.graphic.width) + newObject.graphic.width / 2; newObject.y = -newObject.graphic.height / 2; // Start just off-screen top fallingObjects.push(newObject); game.addChild(newObject); } function updateScoreDisplay() { if (scoreText) { scoreText.setText('Score: ' + LK.getScore()); } } // --- Game Initialization --- // Create and position the city cityInstance = new City(); cityInstance.x = WORLD_WIDTH / 2; cityInstance.y = WORLD_HEIGHT; // Bottom edge of city at bottom of screen game.addChild(cityInstance); // Setup City Health Display cityHealthText = new Text2('', { size: 60, fill: 0xFFFFFF, align: 'center' }); cityHealthText.anchor.set(0.5, 1); // Anchor bottom-center for text LK.gui.bottom.addChild(cityHealthText); // Add to bottom center of GUI cityInstance.setHealthDisplay(cityHealthText); // Link to city instance // Setup Score Display LK.setScore(0); // Initialize score scoreText = new Text2('Score: 0', { size: 60, fill: 0xFFFF00, align: 'center' }); scoreText.anchor.set(0.5, 0); // Anchor top-center // Position score text slightly below the top edge to avoid any engine icons, if necessary // LK.gui.top has y=0. We'll add a small offset. scoreText.y = 20; // Small offset from the very top. LK.gui.top.addChild(scoreText); // --- Event Handlers --- // Initialize Crosshair crosshairInstance = new Crosshair(); crosshairInstance.graphic = crosshairInstance.attachAsset('crosshair_asset', { anchorX: 0.5, anchorY: 0.5 }); crosshairInstance.speed = CROSSHAIR_SPEED; crosshairInstance.x = WORLD_WIDTH / 2; crosshairInstance.y = WORLD_HEIGHT / 2; game.addChild(crosshairInstance); // Initialize Virtual Joystick joystickInstance = new VirtualJoystick(); joystickInstance.initialize('joystick_base_asset', 'joystick_knob_asset', JOYSTICK_VISUAL_RADIUS, JOYSTICK_INTERACTION_RADIUS); game.addChild(joystickInstance); joystickInstance.visible = false; // Start hidden, will appear on first touch // --- Event Handlers --- game.down = function (x, y, eventObj) { if (joystickTouchId === null) { // If no touch is currently controlling the joystick joystickInstance.x = x; joystickInstance.y = y; joystickInstance.visible = true; // Attempt to activate the joystick at the new position. // processDown expects global coordinates and handles local conversion. if (joystickInstance.processDown(x, y, eventObj)) { joystickTouchId = eventObj.identifier; // Track the touch controlling THIS joystick isFiring = false; // This touch is for joystick, not firing } else { // Fallback: if processDown fails (e.g. interactionRadius=0), treat as fire. joystickInstance.visible = false; // Hide joystick if activation failed isFiring = true; } } else { // Joystick is already active with another touch (joystickTouchId is set). // This new touch (eventObj.identifier is different from joystickTouchId) is for firing. isFiring = true; } }; game.move = function (x, y, eventObj) { if (joystickInstance.active && eventObj.identifier === joystickTouchId) { joystickInstance.processMove(x, y, eventObj); } // Note: Crosshair position is updated in game.update based on joystickInstance.deltaX/Y }; game.up = function (x, y, eventObj) { if (eventObj.identifier === joystickTouchId) { // If the touch being lifted is the one controlling the joystick joystickInstance.processUp(eventObj); // Resets joystick state (active=false, knob to center) joystickInstance.visible = false; // Hide the joystick joystickTouchId = null; // Clear the global joystick touch tracker } isFiring = false; // Stop firing on any up event, regardless of which touch it was // joystickTouchId is already cleared if it was the joystick's touch. }; // --- Game Loop --- // --- Game Loop --- game.update = function () { var currentTime = LK.ticks * (1000 / 60); // Approximate current time in ms // 0. Update Crosshair Position based on Joystick if (crosshairInstance && joystickInstance) { crosshairInstance.x += joystickInstance.deltaX * crosshairInstance.speed; crosshairInstance.y += joystickInstance.deltaY * crosshairInstance.speed; // Clamp crosshair to screen bounds (considering anchor is 0.5, 0.5) var chHW = crosshairInstance.graphic.width / 2; var chHH = crosshairInstance.graphic.height / 2; crosshairInstance.x = Math.max(chHW, Math.min(WORLD_WIDTH - chHW, crosshairInstance.x)); crosshairInstance.y = Math.max(chHH, Math.min(WORLD_HEIGHT - chHH, crosshairInstance.y)); } // 1. Firing Logic if (isFiring && currentTime >= lastFireTime + FIRE_RATE_MS) { lastFireTime = currentTime; for (var k = 0; k < fallingObjects.length; k++) { var target = fallingObjects[k]; if (!target.isDestroyed && crosshairInstance.isOver(target)) { target.takeDamage(FIRE_DAMAGE); // LK.getSound('shoot_sound_id').play(); // Placeholder if a shoot sound is added break; // Optional: Hit only one target per shot } } } // 2. Spawn new falling objects if (currentTime >= nextSpawnTime) { spawnFallingObject(); nextSpawnTime = currentTime + SPAWN_INTERVAL_MS_MIN + Math.random() * (SPAWN_INTERVAL_MS_MAX - SPAWN_INTERVAL_MS_MIN); } // 3. Update and check falling objects for (var i = fallingObjects.length - 1; i >= 0; i--) { var obj = fallingObjects[i]; if (obj.isDestroyed) { if (obj.graphic && (obj.graphic.alpha === 0 || obj.graphic.scale && obj.graphic.scale.x < 0.2)) { if (obj.parent) { game.removeChild(obj); } fallingObjects.splice(i, 1); } continue; } obj.update(); if (obj.y + obj.graphic.height * 0.5 * (obj.graphic.scaleY || 1) >= cityInstance.y - cityInstance.graphic.height) { var damageToCity = obj.objectType === 'meteor' ? METEOR_DAMAGE_TO_CITY : ALIEN_DAMAGE_TO_CITY; cityInstance.takeDamage(damageToCity); obj.destroySelf(); continue; } if (obj.y - obj.graphic.height * 0.5 * (obj.graphic.scaleY || 1) > WORLD_HEIGHT) { obj.destroySelf(); continue; } } // Old safety check for playerHoldingTarget is removed as that system is gone. };
===================================================================
--- original.js
+++ change.js
@@ -222,10 +222,10 @@
// var CLICK_DAMAGE = 35; // Replaced by FIRE_DAMAGE
// var HOLD_DAMAGE_PER_INTERVAL = 20; // Replaced by FIRE_DAMAGE
// var HOLD_DAMAGE_INTERVAL_MS = 150; // Replaced by FIRE_RATE_MS
var CROSSHAIR_SPEED = 10;
-var JOYSTICK_VISUAL_RADIUS = 75;
-var JOYSTICK_INTERACTION_RADIUS = 120; // Slightly larger for easier touch activation
+var JOYSTICK_VISUAL_RADIUS = 110; // Max knob center travel distance, adjusted for new asset sizes
+var JOYSTICK_INTERACTION_RADIUS = 180; // Touchable area radius, scaled with new base size
var FIRE_RATE_MS = 150; // How often the player can fire
var FIRE_DAMAGE = 35; // Damage per shot from crosshair
var SPAWN_INTERVAL_MS_MIN = 1200; // Minimum time between spawns
var SPAWN_INTERVAL_MS_MAX = 2500; // Maximum time between spawns
@@ -303,22 +303,31 @@
game.addChild(crosshairInstance);
// Initialize Virtual Joystick
joystickInstance = new VirtualJoystick();
joystickInstance.initialize('joystick_base_asset', 'joystick_knob_asset', JOYSTICK_VISUAL_RADIUS, JOYSTICK_INTERACTION_RADIUS);
-// Place joystick in game coordinates (bottom-left)
-joystickInstance.x = JOYSTICK_INTERACTION_RADIUS + 50; // Add some padding from edge
-joystickInstance.y = WORLD_HEIGHT - (JOYSTICK_INTERACTION_RADIUS + 50); // Add some padding from edge
game.addChild(joystickInstance);
+joystickInstance.visible = false; // Start hidden, will appear on first touch
// --- Event Handlers ---
game.down = function (x, y, eventObj) {
- // Try to activate joystick first
- if (joystickInstance.processDown(x, y, eventObj)) {
- joystickTouchId = eventObj.identifier;
- isFiring = false; // Don't fire if joystick is being controlled
+ if (joystickTouchId === null) {
+ // If no touch is currently controlling the joystick
+ joystickInstance.x = x;
+ joystickInstance.y = y;
+ joystickInstance.visible = true;
+ // Attempt to activate the joystick at the new position.
+ // processDown expects global coordinates and handles local conversion.
+ if (joystickInstance.processDown(x, y, eventObj)) {
+ joystickTouchId = eventObj.identifier; // Track the touch controlling THIS joystick
+ isFiring = false; // This touch is for joystick, not firing
+ } else {
+ // Fallback: if processDown fails (e.g. interactionRadius=0), treat as fire.
+ joystickInstance.visible = false; // Hide joystick if activation failed
+ isFiring = true;
+ }
} else {
- // If joystick not activated, then player is trying to fire
+ // Joystick is already active with another touch (joystickTouchId is set).
+ // This new touch (eventObj.identifier is different from joystickTouchId) is for firing.
isFiring = true;
- joystickTouchId = null; // Ensure no joystick control if firing from elsewhere
}
};
game.move = function (x, y, eventObj) {
if (joystickInstance.active && eventObj.identifier === joystickTouchId) {
@@ -326,13 +335,16 @@
}
// Note: Crosshair position is updated in game.update based on joystickInstance.deltaX/Y
};
game.up = function (x, y, eventObj) {
- if (joystickInstance.active && eventObj.identifier === joystickTouchId) {
- joystickInstance.processUp(eventObj);
+ if (eventObj.identifier === joystickTouchId) {
+ // If the touch being lifted is the one controlling the joystick
+ joystickInstance.processUp(eventObj); // Resets joystick state (active=false, knob to center)
+ joystickInstance.visible = false; // Hide the joystick
+ joystickTouchId = null; // Clear the global joystick touch tracker
}
- isFiring = false; // Stop firing on any up event
- joystickTouchId = null; // Clear joystick touch tracking
+ isFiring = false; // Stop firing on any up event, regardless of which touch it was
+ // joystickTouchId is already cleared if it was the joystick's touch.
};
// --- Game Loop ---
// --- Game Loop ---
game.update = function () {
Метеорит без огня пастельные цвета In-Game asset. 2d. High contrast. No shadows
Похожий
Иконка повышение урона, сочные цвета. In-Game asset. 2d. High contrast. No shadows. Comix
иконка на скорость атаки
надпись upgrade как красивая кнопка In-Game asset. 2d. High contrast. No shadows. comix
центральный круг желтый а внешний оранжевый
голубой вместо оранжевого
Красно оранжевый
Restyled
Разрешение 2048 на 400
молния должна быть с двух концов одинаковая и ответвления смотреть строго вверх и вниз а не наискосок
иконка шанса двойного урона (x2)
иконка голубой молнии без текста и цыферблата
иконка огня
Вместо молнии синяя снежинка, все остальное без изменений
сделать светлее
Комикс
сделать рамку толще в два раза и немного не правильной формы как в комиксах
сделать рамку тоньше сохранив стиль и цвета сочнее
надпись shop как красивая кнопка In-Game asset. 2d. High contrast. No shadows. comix
Рамка для всплывающей меню подсказки. In-Game asset. 2d. High contrast. No shadows
Крестик для закрытия окна. In-Game asset. 2d. High contrast. No shadows
Иконка английского языка флаг без текста In-Game asset. 2d. High contrast. No shadows
Заменить на российский без текста, рамку сохранить
Удалить желтый фон
Флаг земенить на немецкий рамки сохранить
Заменить на испанский, сохранить рамку.
сделать точно такуюже рамку но надпись заменить на shop. звезду заменить на ракету, а стрелку на щит
все оставить как есть но удалить черноту за рамками
круглая иконка подсказки I. In-Game asset. 2d. High contrast. No shadows
убери все звезды оставь только чистое небо
иконка восстановление здоровья много зеленых крестов в рамке, сочные цвета красивый фон. In-Game asset. 2d. High contrast. No shadows
синий щит на ярко оранжевом фоне
залп ракетного огня
шаровая молния. In-Game asset. 2d. High contrast. No shadows
башня тесла с молниями фон голубой
Огненный шар
перекрасить больше желтого и оранжевого
перекрасить больше голубого, светло-голубого,
турецкий флаг
Вместо огненного кольца, огненные шары разлетающие вверх в разные стороны
Текст убрать. Вместо молний снежинки
Вместо молнии снежинка, и покрасить в синий
Льдинка как стеклышко. In-Game asset. 2d. High contrast. No shadows
убрать дырку
бесформенная амеба
удали крывлья оставь только жука
оставь только крылья, удали жука
перекрась
Shoot
Sound effect
Boom
Sound effect
Pokupka
Sound effect
menu
Sound effect
molnia
Sound effect
krit
Sound effect
icetresk
Sound effect
peretik
Sound effect
music1
Music
music2
Music
music3
Music
musicFight
Music
udarshield
Sound effect
startraket
Sound effect
raketaudar
Sound effect
Ognemet
Sound effect
Tresklda
Sound effect
stop
Sound effect
goldsound
Sound effect
alien_bum
Sound effect