User prompt
Merminin ucu ateş edilen yöne doğru dönsun
User prompt
Player ateş ettiği tarafa dönsün
User prompt
Marketteki ögeler üstüne tıklanarak satın alınsın
User prompt
Marketteki eşyalar satın alınabilsin ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Kazanılan COIN ile marketten satın alım yapılsın ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Kazanılan "COIN" ile marketten satın alım yapılabilsin. Skor her oyunda sıfırlansın ama "COIN" satın alım yapılmadığı sürece azalmasın ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Zombiler bize çarpınca "COIN" kazanılmasın ama skor artsın
User prompt
Zombileri öldürerek kazandığımız "COIN" skorun altında görünsün
User prompt
Marketteki "POINT" yerine zombileri öldürerek kazanılan "COIN" kullanılsın
User prompt
Marketteki "BUY" butonunu kaldır
User prompt
Market sekmesindeki satın alınacak eşyaları almak için üstünde "BUY" yazan bir buton oluştur
User prompt
Market menüsündeki satın alma barları yazılarla eşit boyutta olsun
User prompt
Market sekmesi daha büyük görünsün
User prompt
"Score" yerine "POINT" kullanılsın
User prompt
Market sekmesindeki eşyalar satın alınabilsin ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Market sekmesindeki eşyalar oyunda elde ettiğimiz "Score" ile alınsın ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Oyun sonundaki "MARKET" butonuna tıklayınca market sekmesi açılsın ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
"ammo pickup" özelliğini kaldır
User prompt
Bitiş menüsüne market butonu ekle
User prompt
Sonradan eklenilen özelliklerin hepsini sil
User prompt
"BUY" yazısının üstüne tıklayınca üstündeki şey satın alınsın
User prompt
Satın alınacak şeylerin altında "BUY" diye bir yazı olsun ona basınca üstündeki ürünleri satın alsın ve oyunu etkilesin.
User prompt
Satın alma panelindeki şeyler kullanılmıyoru bunu düzelt
User prompt
Oyun bittikten sonra otomatik olarak düşmanlar gelmeyi bıraksın ve satın alma işlemi bittikten sonra oyun tekrar başlasın
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'toGlobal')' in or related to this line: 'var localPos = self.toLocal(obj.parent.toGlobal(obj.position));' Line Number: 255
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
healthUpgrades: 0,
ammoUpgrades: 0,
speedUpgrades: 0,
coins: 0
});
/****
* Classes
****/
var Bullet = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.dx = 0;
self.dy = 0;
self.lifetime = 120;
self.update = function () {
self.x += self.dx * self.speed;
self.y += self.dy * self.speed;
self.lifetime--;
if (self.lifetime <= 0 || self.isOutOfBounds()) {
self.remove();
return;
}
for (var i = 0; i < zombies.length; i++) {
var zombie = zombies[i];
if (self.intersects(zombie)) {
zombie.takeDamage(1);
self.remove();
return;
}
}
};
self.isOutOfBounds = function () {
return self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732;
};
self.remove = function () {
var index = bullets.indexOf(self);
if (index > -1) {
bullets.splice(index, 1);
}
self.destroy();
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 100;
self.maxHealth = 100;
self.ammo = 30;
self.maxAmmo = 30;
self.shootCooldown = 0;
self.baseShootCooldown = 10;
self.update = function () {
if (self.shootCooldown > 0) {
self.shootCooldown--;
}
};
self.takeDamage = function (damage) {
self.health -= damage;
if (self.health <= 0) {
self.health = 0;
LK.effects.flashScreen(0xff0000, 1000);
showCustomGameOver();
} else {
LK.effects.flashObject(self, 0xff0000, 200);
}
};
self.canShoot = function () {
return self.ammo > 0 && self.shootCooldown <= 0;
};
self.shoot = function () {
if (self.canShoot()) {
self.ammo--;
self.shootCooldown = self.baseShootCooldown;
return true;
}
return false;
};
return self;
});
var Zombie = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('zombie', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 1 + Math.random() * 0.5;
self.health = 1;
self.damage = 10;
self.lastPlayerCollision = false;
self.update = function () {
var dx = player.x - self.x;
var dy = player.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
var currentCollision = self.intersects(player);
if (!self.lastPlayerCollision && currentCollision) {
player.takeDamage(self.damage);
// Zombie dies from collision but doesn't give coins
self.health = 0;
LK.effects.flashObject(self, 0xffffff, 100);
LK.getSound('zombieHit').play();
var index = zombies.indexOf(self);
if (index > -1) {
zombies.splice(index, 1);
}
self.destroy();
}
self.lastPlayerCollision = currentCollision;
};
self.takeDamage = function (damage) {
self.health -= damage;
if (self.health <= 0) {
LK.effects.flashObject(self, 0xffffff, 100);
LK.setScore(LK.getScore() + 10);
storage.coins += 10;
LK.getSound('zombieHit').play();
var index = zombies.indexOf(self);
if (index > -1) {
zombies.splice(index, 1);
}
self.destroy();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2d2d2d
});
/****
* Game Code
****/
var arena = game.attachAsset('arena', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 / 2;
// Apply stored upgrades
player.maxHealth = 100 + storage.healthUpgrades * 20;
player.health = player.maxHealth;
player.maxAmmo = 30 + storage.ammoUpgrades * 10;
player.ammo = player.maxAmmo;
player.baseShootCooldown = Math.max(1, 10 - storage.speedUpgrades);
var zombies = [];
var bullets = [];
var waveNumber = 1;
var zombiesInWave = 5;
var zombiesSpawned = 0;
var spawnTimer = 0;
var gameOverScreen = null;
var showingGameOver = false;
var showingMarket = false;
var marketPanel = null;
var healthBar = new Text2('Health: 100', {
size: 60,
fill: 0xFF0000
});
healthBar.anchor.set(0, 0);
LK.gui.topLeft.addChild(healthBar);
var ammoDisplay = new Text2('Ammo: 30', {
size: 60,
fill: 0x00FF00
});
ammoDisplay.anchor.set(0, 0);
ammoDisplay.y = 70;
LK.gui.topLeft.addChild(ammoDisplay);
var scoreDisplay = new Text2('SCORE: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreDisplay.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreDisplay);
var coinDisplay = new Text2('COIN: ' + storage.coins, {
size: 60,
fill: 0xFFD700
});
coinDisplay.anchor.set(0.5, 0);
coinDisplay.y = 90;
LK.gui.top.addChild(coinDisplay);
var waveDisplay = new Text2('Wave: 1', {
size: 60,
fill: 0xFFFF00
});
waveDisplay.anchor.set(1, 0);
LK.gui.topRight.addChild(waveDisplay);
function showCustomGameOver() {
if (showingGameOver) return;
showingGameOver = true;
gameOverScreen = new Container();
// Semi-transparent background
var background = LK.getAsset('arena', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2,
scaleX: 3,
scaleY: 3
});
background.alpha = 0.8;
background.tint = 0x000000;
gameOverScreen.addChild(background);
// Game Over text
var gameOverText = new Text2('GAME OVER', {
size: 120,
fill: 0xFF0000
});
gameOverText.anchor.set(0.5, 0.5);
gameOverText.x = 2048 / 2;
gameOverText.y = 2732 / 2 - 200;
gameOverScreen.addChild(gameOverText);
// Final score
var finalScoreText = new Text2('Final SCORE: ' + LK.getScore(), {
size: 80,
fill: 0xFFFFFF
});
finalScoreText.anchor.set(0.5, 0.5);
finalScoreText.x = 2048 / 2;
finalScoreText.y = 2732 / 2 - 100;
gameOverScreen.addChild(finalScoreText);
// Market button
var marketButton = LK.getAsset('marketButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2 + 50
});
gameOverScreen.addChild(marketButton);
// Market button text
var marketText = new Text2('MARKET', {
size: 60,
fill: 0xFFFFFF
});
marketText.anchor.set(0.5, 0.5);
marketText.x = 2048 / 2;
marketText.y = 2732 / 2 + 50;
gameOverScreen.addChild(marketText);
// Restart button
var restartButton = LK.getAsset('marketButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2 + 150
});
restartButton.tint = 0x2196F3;
gameOverScreen.addChild(restartButton);
// Restart button text
var restartText = new Text2('RESTART', {
size: 60,
fill: 0xFFFFFF
});
restartText.anchor.set(0.5, 0.5);
restartText.x = 2048 / 2;
restartText.y = 2732 / 2 + 150;
gameOverScreen.addChild(restartText);
game.addChild(gameOverScreen);
}
function hideGameOver() {
if (gameOverScreen) {
gameOverScreen.destroy();
gameOverScreen = null;
}
showingGameOver = false;
}
function showMarket() {
if (showingMarket) return;
showingMarket = true;
marketPanel = new Container();
// Semi-transparent background
var background = LK.getAsset('arena', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2,
scaleX: 4,
scaleY: 4
});
background.alpha = 0.9;
background.tint = 0x000000;
marketPanel.addChild(background);
// Market title
var marketTitle = new Text2('MARKET', {
size: 140,
fill: 0xFFFFFF
});
marketTitle.anchor.set(0.5, 0.5);
marketTitle.x = 2048 / 2;
marketTitle.y = 2732 / 2 - 400;
marketPanel.addChild(marketTitle);
// Show current coins
var currentCoins = storage.coins;
var scoreText = new Text2('COIN: ' + storage.coins, {
size: 80,
fill: 0xFFD700
});
scoreText.anchor.set(0.5, 0.5);
scoreText.x = 2048 / 2;
scoreText.y = 2732 / 2 - 300;
marketPanel.addChild(scoreText);
// Health upgrade
var healthUpgrade = LK.getAsset('marketButton', {
width: 600,
height: 100,
color: 0xFF6B6B,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2 - 150
});
marketPanel.addChild(healthUpgrade);
var healthText = new Text2('Health +20 (100 COIN)', {
size: 65,
fill: 0xFFFFFF
});
healthText.anchor.set(0.5, 0.5);
healthText.x = 2048 / 2 - 100;
healthText.y = 2732 / 2 - 150;
marketPanel.addChild(healthText);
// Ammo upgrade
var ammoUpgrade = LK.getAsset('marketButton', {
width: 500,
height: 100,
color: 0x4ECDC4,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2 - 50
});
marketPanel.addChild(ammoUpgrade);
var ammoText = new Text2('Ammo +10 (50 COIN)', {
size: 65,
fill: 0xFFFFFF
});
ammoText.anchor.set(0.5, 0.5);
ammoText.x = 2048 / 2 - 100;
ammoText.y = 2732 / 2 - 50;
marketPanel.addChild(ammoText);
// Speed upgrade
var speedUpgrade = LK.getAsset('marketButton', {
width: 550,
height: 100,
color: 0x45B7D1,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2 + 50
});
marketPanel.addChild(speedUpgrade);
var speedText = new Text2('Fire Rate +1 (150 COIN)', {
size: 65,
fill: 0xFFFFFF
});
speedText.anchor.set(0.5, 0.5);
speedText.x = 2048 / 2 - 100;
speedText.y = 2732 / 2 + 50;
marketPanel.addChild(speedText);
// Close button
var closeButton = LK.getAsset('marketButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2 + 200
});
closeButton.tint = 0x666666;
marketPanel.addChild(closeButton);
var closeText = new Text2('CLOSE', {
size: 80,
fill: 0xFFFFFF
});
closeText.anchor.set(0.5, 0.5);
closeText.x = 2048 / 2;
closeText.y = 2732 / 2 + 200;
marketPanel.addChild(closeText);
game.addChild(marketPanel);
}
function hideMarket() {
if (marketPanel) {
marketPanel.destroy();
marketPanel = null;
}
showingMarket = false;
}
function restartGame() {
hideGameOver();
// Reset player with upgraded stats
player.maxHealth = 100 + storage.healthUpgrades * 20;
player.health = player.maxHealth;
player.maxAmmo = 30 + storage.ammoUpgrades * 10;
player.ammo = player.maxAmmo;
player.baseShootCooldown = Math.max(1, 10 - storage.speedUpgrades);
player.x = 2048 / 2;
player.y = 2732 / 2;
// Clear all entities
for (var i = 0; i < zombies.length; i++) {
zombies[i].destroy();
}
zombies = [];
for (var i = 0; i < bullets.length; i++) {
bullets[i].destroy();
}
bullets = [];
// Reset game state
waveNumber = 1;
zombiesInWave = 5;
zombiesSpawned = 0;
spawnTimer = 0;
LK.setScore(0);
}
function spawnZombie() {
var zombie = new Zombie();
var angle = Math.random() * Math.PI * 2;
var spawnRadius = 1000;
zombie.x = player.x + Math.cos(angle) * spawnRadius;
zombie.y = player.y + Math.sin(angle) * spawnRadius;
zombies.push(zombie);
game.addChild(zombie);
}
function shootBullet(targetX, targetY) {
if (player.shoot()) {
var bullet = new Bullet();
bullet.x = player.x;
bullet.y = player.y;
var dx = targetX - player.x;
var dy = targetY - player.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
bullet.dx = dx / distance;
bullet.dy = dy / distance;
}
bullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
}
}
game.down = function (x, y, obj) {
if (showingGameOver) {
// Market button click detection
if (x >= 2048 / 2 - 150 && x <= 2048 / 2 + 150 && y >= 2732 / 2 + 10 && y <= 2732 / 2 + 90) {
showMarket();
return;
}
// Restart button click detection
if (x >= 2048 / 2 - 150 && x <= 2048 / 2 + 150 && y >= 2732 / 2 + 110 && y <= 2732 / 2 + 190) {
restartGame();
return;
}
} else if (showingMarket) {
var currentCoins = storage.coins;
// Health upgrade button click
if (x >= 2048 / 2 - 300 && x <= 2048 / 2 + 300 && y >= 2732 / 2 - 200 && y <= 2732 / 2 - 100) {
if (storage.coins >= 100) {
storage.coins -= 100;
storage.healthUpgrades++;
player.maxHealth += 20;
player.health = Math.min(player.health + 20, player.maxHealth);
hideMarket();
showMarket(); // Refresh market display
}
return;
}
// Ammo upgrade button click
if (x >= 2048 / 2 - 250 && x <= 2048 / 2 + 250 && y >= 2732 / 2 - 100 && y <= 2732 / 2 + 0) {
if (storage.coins >= 50) {
storage.coins -= 50;
storage.ammoUpgrades++;
player.maxAmmo += 10;
player.ammo = Math.min(player.ammo + 10, player.maxAmmo);
hideMarket();
showMarket(); // Refresh market display
}
return;
}
// Speed upgrade button click
if (x >= 2048 / 2 - 275 && x <= 2048 / 2 + 275 && y >= 2732 / 2 + 0 && y <= 2732 / 2 + 100) {
if (storage.coins >= 150) {
storage.coins -= 150;
storage.speedUpgrades++;
player.baseShootCooldown = Math.max(1, player.baseShootCooldown - 1);
hideMarket();
showMarket(); // Refresh market display
}
return;
}
// Close button click
if (x >= 2048 / 2 - 200 && x <= 2048 / 2 + 200 && y >= 2732 / 2 + 150 && y <= 2732 / 2 + 250) {
hideMarket();
return;
}
} else {
shootBullet(x, y);
}
};
game.update = function () {
if (showingGameOver || showingMarket) {
return;
}
spawnTimer++;
if (zombiesSpawned < zombiesInWave && spawnTimer >= 60) {
spawnZombie();
zombiesSpawned++;
spawnTimer = 0;
}
if (zombiesSpawned >= zombiesInWave && zombies.length === 0) {
waveNumber++;
zombiesInWave = Math.min(5 + waveNumber * 2, 20);
zombiesSpawned = 0;
waveDisplay.setText('Wave: ' + waveNumber);
for (var i = 0; i < zombies.length; i++) {
zombies[i].speed += 0.1;
}
}
healthBar.setText('Health: ' + player.health);
ammoDisplay.setText('Ammo: ' + player.ammo);
scoreDisplay.setText('SCORE: ' + LK.getScore());
coinDisplay.setText('COIN: ' + storage.coins);
for (var i = bullets.length - 1; i >= 0; i--) {
bullets[i].update();
}
for (var i = zombies.length - 1; i >= 0; i--) {
zombies[i].update();
}
};
LK.playMusic('bgmusic'); ===================================================================
--- original.js
+++ change.js
@@ -312,9 +312,9 @@
marketTitle.y = 2732 / 2 - 400;
marketPanel.addChild(marketTitle);
// Show current coins
var currentCoins = storage.coins;
- var scoreText = new Text2('COIN: ' + currentCoins, {
+ var scoreText = new Text2('COIN: ' + storage.coins, {
size: 80,
fill: 0xFFD700
});
scoreText.anchor.set(0.5, 0.5);
@@ -474,9 +474,9 @@
} else if (showingMarket) {
var currentCoins = storage.coins;
// Health upgrade button click
if (x >= 2048 / 2 - 300 && x <= 2048 / 2 + 300 && y >= 2732 / 2 - 200 && y <= 2732 / 2 - 100) {
- if (currentCoins >= 100) {
+ if (storage.coins >= 100) {
storage.coins -= 100;
storage.healthUpgrades++;
player.maxHealth += 20;
player.health = Math.min(player.health + 20, player.maxHealth);
@@ -486,9 +486,9 @@
return;
}
// Ammo upgrade button click
if (x >= 2048 / 2 - 250 && x <= 2048 / 2 + 250 && y >= 2732 / 2 - 100 && y <= 2732 / 2 + 0) {
- if (currentCoins >= 50) {
+ if (storage.coins >= 50) {
storage.coins -= 50;
storage.ammoUpgrades++;
player.maxAmmo += 10;
player.ammo = Math.min(player.ammo + 10, player.maxAmmo);
@@ -498,9 +498,9 @@
return;
}
// Speed upgrade button click
if (x >= 2048 / 2 - 275 && x <= 2048 / 2 + 275 && y >= 2732 / 2 + 0 && y <= 2732 / 2 + 100) {
- if (currentCoins >= 150) {
+ if (storage.coins >= 150) {
storage.coins -= 150;
storage.speedUpgrades++;
player.baseShootCooldown = Math.max(1, player.baseShootCooldown - 1);
hideMarket();
Üstten görünümlü zombi. In-Game asset. 2d. High contrast. No shadows
Ortasında elips şeklinde bir boşluk hariç her yeri sık ağaçlık olan bir orman. In-Game asset. 2d. High contrast. No shadows
Ahşap tema. In-Game asset. 2d. High contrast. No shadows
pompalı tüfek mermisi. In-Game asset. 2d. High contrast. No shadows
hafif makineli tüfek mermisi. In-Game asset. 2d. High contrast. No shadows
Uzi çiz. In-Game asset. 2d. High contrast. No shadows
Pompalı Tüfek. In-Game asset. 2d. High contrast. No shadows
Bunun arkaplanını sil
Arkaplanını sil
boss zombie. In-Game asset. 2d. High contrast. No shadows
dümdüz sadece buzullardan oluşsun aralarında yarıklar olmasın