User prompt
Karakterimiz şuanda 10 mermi yediğinde ölüyor bu ölçeği 12 yap
User prompt
Hayır reload 10 mermi olsun
User prompt
Canımız 12 mermilik olsun
User prompt
Yukarı dedim aşşağı demedim reload bar ile çakışıyorlar bunu düzelt
User prompt
Birazcık daha yukarı çek
User prompt
Genişliğini arttır
User prompt
Biraz daha büyüt
User prompt
Can barını biraz daha büyüt
User prompt
Karakterin hitbox ını küçült
User prompt
Mermi barını ve can barını karaktere uygun bir şekilde birazcık yukarı çek
User prompt
Devam et
User prompt
Bazı duvarlardaki ele geçirme animasyonu çalışmıyor bir bölgeye en yakın duvar etkilensin bütün bölgeleri ele geçirince direkt bütün duvarlar captured olsun
User prompt
Rakipler peşpeşe spawn olmasın 2 sn bekleme süresi olsun
User prompt
Rakipler tek bölge olunca sadece o bölgede bekliyor öyle olmasın hareket etsinler
User prompt
Rakiplerde 7 mermi sonra reload sistemi olsun
User prompt
Reload barı biz mermi atınca birer birer azalsın
User prompt
Bölge ele geçirme ile şarjörün bağlantısını kes bölge ele geçirşnce şarjöre etki etmesin
User prompt
Bölge ele geçirdiğimizde şarjör yok oluyor düzelt
User prompt
Reload bar şarjör bitince spawn oluyor direkt oyun başında spawn olsun ve her mermimiz bittiğinde(cooldown girdiğinde) içindeki mermi fotoğrafları silinsin ve geri gelsin
User prompt
Bölge ele geçirdiğimizde o bölgeye yakın olan duvarların resmi değişsin bunun için bir asset ekle (örn. Duvarda west side yazsın)
User prompt
Bu duvarların içinden geçilemez yap
User prompt
Haritanın belli bölgelerine küçük cephe ye benzer duvarlar koy bunlar mermi geçirmesin
User prompt
So make them visual
User prompt
Reload bar karakterimizin üzerinde olsun karakterimiz nereye giderse oda oraya gitsin
User prompt
Reload bar etkileşimle olsun örn mermi bitince yenilenme animasyonu girsin ve assetin üzerinde 7 mermi olsun
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 15; self.vx = 0; self.vy = 0; self.lifetime = 120; self.update = function () { self.x += self.vx; self.y += self.vy; self.lifetime--; }; return self; }); var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.shootCooldown = 0; self.moveTimer = 0; // Start at a random non-captured zone position var availableZones = []; for (var k = 0; k < zones.length; k++) { if (!zones[k].captured) { availableZones.push(k); } } if (availableZones.length > 0) { var randomIndex = Math.floor(Math.random() * availableZones.length); var zoneIndex = availableZones[randomIndex]; self.targetX = [512, 1536, 512, 1536][zoneIndex]; self.targetY = [683, 683, 2049, 2049][zoneIndex]; } else { // If all zones are captured, default to center self.targetX = 1024; self.targetY = 1366; } self.update = function () { // Move towards target position var dx = self.targetX - self.x; var dy = self.targetY - self.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist > 20) { self.x += dx / dist * self.speed; self.y += dy / dist * self.speed; } // Change target position periodically self.moveTimer++; if (self.moveTimer > 180 || dist < 20) { self.moveTimer = 0; // Move to a random non-captured zone position var availableZones = []; for (var k = 0; k < zones.length; k++) { if (!zones[k].captured) { availableZones.push(k); } } if (availableZones.length > 0) { var randomIndex = Math.floor(Math.random() * availableZones.length); var zoneIndex = availableZones[randomIndex]; self.targetX = [512, 1536, 512, 1536][zoneIndex]; self.targetY = [683, 683, 2049, 2049][zoneIndex]; } } // Shoot at player if (self.shootCooldown > 0) { self.shootCooldown--; } else if (player) { var pdx = player.x - self.x; var pdy = player.y - self.y; var pdist = Math.sqrt(pdx * pdx + pdy * pdy); // Only attack when within 500 pixel proximity if (pdist < 500) { self.shoot(player.x, player.y); } } }; self.shoot = function (targetX, targetY) { var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; var dx = targetX - self.x; var dy = targetY - self.y; var dist = Math.sqrt(dx * dx + dy * dy); bullet.vx = dx / dist * bullet.speed; bullet.vy = dy / dist * bullet.speed; bullet.isEnemyBullet = true; enemyBullets.push(bullet); game.addChild(bullet); LK.getSound('shoot').play(); self.shootCooldown = 60; }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 8; self.shootCooldown = 0; self.health = 10; self.maxHealth = 10; // Create health bar container var healthBar = self.addChild(new Container()); healthBar.y = -playerGraphics.height / 2 - 20; healthBar.visible = false; // Health bar background var healthBg = healthBar.attachAsset('zone', { width: 80, height: 12, tint: 0x333333, anchorX: 0.5, anchorY: 0.5 }); // Health bar fill var healthFill = healthBar.attachAsset('zone', { width: 76, height: 8, tint: 0x00ff00, anchorX: 0, anchorY: 0.5 }); healthFill.x = -38; self.healthBar = healthBar; self.healthFill = healthFill; self.healthBg = healthBg; self.takeDamage = function () { self.health--; self.healthBar.visible = true; // Update health bar width self.healthFill.width = self.health / self.maxHealth * 76; // Update health bar color based on health if (self.health <= 3) { self.healthFill.tint = 0xff0000; } else if (self.health <= 6) { self.healthFill.tint = 0xffaa00; } else { self.healthFill.tint = 0x00ff00; } // Flash effect LK.effects.flashObject(self, 0xff0000, 300); if (self.health <= 0) { LK.showGameOver(); } }; self.update = function () { if (self.shootCooldown > 0) { self.shootCooldown--; } }; self.shoot = function (targetX, targetY) { // Magazine/cooldown logic if (typeof playerMagazine !== "undefined" && typeof playerReloading !== "undefined") { if (playerReloading) { // Can't shoot while reloading return; } if (playerMagazine <= 0) { // Start reload if not already if (!playerReloading) { playerReloading = true; // Track reload bar timing if (typeof Date !== "undefined") { reloadStartTime = Date.now(); reloadEndTime = reloadStartTime + playerReloadTime; } // Animate reload bar fill and bullet icons if (typeof reloadBar !== "undefined") { reloadBar.visible = true; reloadFill.width = 0; for (var i = 0; i < reloadBar.bulletIcons.length; i++) { reloadBar.bulletIcons[i].alpha = 0.3; reloadBar.bulletIcons[i].color = 0x888888; } } playerReloadTimeout = LK.setTimeout(function () { playerMagazine = playerMaxMagazine; playerReloading = false; reloadStartTime = 0; reloadEndTime = 0; // On reload complete, show all bullets as filled if (typeof reloadBar !== "undefined") { for (var i = 0; i < reloadBar.bulletIcons.length; i++) { reloadBar.bulletIcons[i].alpha = 1; reloadBar.bulletIcons[i].color = 0xffff00; } reloadFill.width = 200; } }, playerReloadTime); } return; } } if (self.shootCooldown <= 0) { // Use selected bullet type var type = bulletTypes[currentBulletType]; var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; // Change bullet asset and speed if (type.id !== 'bullet') { bullet.removeChild(bullet.children[0]); var bulletGraphics = bullet.attachAsset(type.id, { anchorX: 0.5, anchorY: 0.5 }); bullet.speed = type.speed; } else { bullet.speed = type.speed; } var dx = targetX - self.x; var dy = targetY - self.y; var dist = Math.sqrt(dx * dx + dy * dy); bullet.vx = dx / dist * bullet.speed; bullet.vy = dy / dist * bullet.speed; bullets.push(bullet); game.addChild(bullet); LK.getSound('shoot').play(); self.shootCooldown = 15; // Decrement magazine if (typeof playerMagazine !== "undefined") { playerMagazine--; if (playerMagazine <= 0) { playerReloading = true; playerReloadTimeout = LK.setTimeout(function () { playerMagazine = playerMaxMagazine; playerReloading = false; }, playerReloadTime); } } } }; return self; }); var Zone = Container.expand(function (zoneIndex) { var self = Container.call(this); var zoneAssetId = 'zone' + (zoneIndex + 1); var zoneGraphics = self.attachAsset(zoneAssetId, { anchorX: 0.5, anchorY: 0.5, alpha: 0.3 }); // Increase brightness using tween color effect (tint to a lighter color) tween(zoneGraphics, { tint: 0xffffff }, { duration: 500 }); self.graphics = zoneGraphics; self.captureProgress = 0; self.captureTime = 180; self.captured = false; self.playerInside = false; var progressBar = self.addChild(new Container()); progressBar.y = -zoneGraphics.height / 2 - 30; var progressBg = progressBar.attachAsset('zone', { width: 300, height: 20, tint: 0x333333, anchorX: 0.5, anchorY: 0.5 }); var progressFill = progressBar.attachAsset('zone', { width: 0, height: 16, tint: 0x00ff00, anchorX: 0, anchorY: 0.5 }); progressFill.x = -148; self.progressFill = progressFill; progressBar.visible = false; self.progressBar = progressBar; self.update = function () { if (self.playerInside && !self.captured) { self.captureProgress++; self.progressBar.visible = true; self.progressFill.width = self.captureProgress / self.captureTime * 296; if (self.captureProgress >= self.captureTime) { self.captured = true; self.graphics.tint = 0x00ff00; self.graphics.alpha = 0.5; self.progressBar.visible = false; LK.getSound('capture').play(); capturedZones++; updateScore(); } } else if (!self.playerInside && self.captureProgress > 0 && !self.captured) { self.captureProgress = Math.max(0, self.captureProgress - 2); if (self.captureProgress === 0) { self.progressBar.visible = false; } else { self.progressFill.width = self.captureProgress / self.captureTime * 296; } } }; self.checkPlayerInside = function (player) { var halfWidth = self.graphics.width / 2; var halfHeight = self.graphics.height / 2; var dx = Math.abs(player.x - self.x); var dy = Math.abs(player.y - self.y); self.playerInside = dx < halfWidth && dy < halfHeight; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ var player; var bullets = []; var enemyBullets = []; var enemies = []; var zones = []; var capturedZones = 0; var totalZones = 4; var isDragging = false; var lastShootX = 0; var lastShootY = 0; // Bullet type switching var bulletTypes = [{ id: 'bullet', color: 0xffff00, speed: 15, size: 20 }, // normal { id: 'bullet_red', color: 0xff4444, speed: 10, size: 32 }, // slow, big { id: 'bullet_blue', color: 0x44aaff, speed: 22, size: 14 } // fast, small ]; var currentBulletType = 0; if (typeof storage.getItem === "function" && storage.getItem("currentBulletType") !== undefined && storage.getItem("currentBulletType") !== null) { currentBulletType = parseInt(storage.getItem("currentBulletType")); } // Dynamically create bullet assets if not already present for (var i = 1; i < bulletTypes.length; i++) { if (!LK.getAsset(bulletTypes[i].id, {})) {} } // UI for bullet type var bulletTypeTxt = new Text2('Bullet: Normal', { size: 60, fill: 0xffffff }); bulletTypeTxt.anchor.set(0.5, 0); bulletTypeTxt.y = 120; bulletTypeTxt.x = 1024; LK.gui.top.addChild(bulletTypeTxt); // Button to switch bullet type (simple text button) var switchBtn = new Text2('Change Bullet', { size: 60, fill: 0x00ffcc }); switchBtn.anchor.set(0.5, 0); switchBtn.y = 210; switchBtn.x = 1024; LK.gui.top.addChild(switchBtn); // Touch/click event for switchBtn switchBtn.down = function (x, y, obj) { currentBulletType = (currentBulletType + 1) % bulletTypes.length; storage.set("currentBulletType", currentBulletType); var names = ['Normal', 'Big', 'Fast']; bulletTypeTxt.setText('Bullet: ' + names[currentBulletType]); }; var scoreTxt = new Text2('Zones: 0/4', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); function updateScore() { scoreTxt.setText('Zones: ' + capturedZones + '/' + totalZones); if (capturedZones >= totalZones) { LK.showYouWin(); } ; // Update reload bar position and progress, animate fill and update bullet icons if (typeof reloadBar !== "undefined" && typeof player !== "undefined") { reloadBar.x = player.x; reloadBar.y = player.y - 80; // Update bullet icons: show filled for each bullet in magazine, empty for spent if (typeof playerMagazine !== "undefined" && reloadBar.bulletIcons) { for (var i = 0; i < reloadBar.bulletIcons.length; i++) { if (i < playerMagazine && !playerReloading) { reloadBar.bulletIcons[i].alpha = 1; reloadBar.bulletIcons[i].color = 0xffff00; } else { reloadBar.bulletIcons[i].alpha = 0.3; reloadBar.bulletIcons[i].color = 0x888888; } } } if (typeof playerReloading !== "undefined" && playerReloading) { reloadBar.visible = true; // Animate fill: (playerReloadTime - remaining) / playerReloadTime if (typeof reloadStartTime !== "undefined" && typeof reloadEndTime !== "undefined" && reloadStartTime > 0 && reloadEndTime > reloadStartTime) { var now = Date.now(); var progress = Math.min(1, Math.max(0, (now - reloadStartTime) / (reloadEndTime - reloadStartTime))); reloadFill.width = 200 * progress; // Animate bullet icons: fill them as reload progresses var bulletsToShow = Math.floor(progress * 7); for (var i = 0; i < reloadBar.bulletIcons.length; i++) { if (i < bulletsToShow) { reloadBar.bulletIcons[i].alpha = 1; reloadBar.bulletIcons[i].color = 0xffff00; } else { reloadBar.bulletIcons[i].alpha = 0.3; reloadBar.bulletIcons[i].color = 0x888888; } } } else { reloadFill.width = 0; } } else if (typeof playerReloading !== "undefined" && !playerReloading) { reloadBar.visible = false; reloadFill.width = 0; } } } ; // Magazine and cooldown for player shooting var playerMagazine = 7; var playerMaxMagazine = 7; var playerReloading = false; var playerReloadTimeout = null; var playerReloadTime = 1500; // ms // Track reload progress for bar var reloadStartTime = 0; var reloadEndTime = 0; player = game.addChild(new Player()); player.x = 1024; player.y = 1366; // Reload progress bar UI above player, with 7 bullet icons and animated fill var reloadBar = new Container(); // Background var reloadBg = reloadBar.attachAsset('reloadBarBg', { anchorX: 0.5, anchorY: 0.5 }); // Animated fill (for reload progress) var reloadFill = reloadBar.attachAsset('reloadBarFill', { width: 0, anchorX: 0, anchorY: 0.5 }); reloadFill.x = -100; reloadFill.y = 0; // 7 bullet icons (small ellipses) spaced evenly reloadBar.bulletIcons = []; var bulletIconSpacing = 28; var bulletIconStartX = -84; for (var i = 0; i < 7; i++) { var icon = reloadBar.attachAsset('bullet', { width: 18, height: 18, anchorX: 0.5, anchorY: 0.5, color: 0xffff00 }); icon.x = bulletIconStartX + i * bulletIconSpacing; icon.y = 0; reloadBar.bulletIcons.push(icon); } reloadBar.visible = false; game.addChild(reloadBar); var zonePositions = [{ x: 512, y: 683 }, { x: 1536, y: 683 }, { x: 512, y: 2049 }, { x: 1536, y: 2049 }]; for (var i = 0; i < zonePositions.length; i++) { var zone = new Zone(i); zone.x = zonePositions[i].x; zone.y = zonePositions[i].y; zones.push(zone); game.addChild(zone); } // Spawn enemies at zone positions for (var i = 0; i < 3; i++) { var enemy = new Enemy(); var zoneIndex = i % zonePositions.length; enemy.x = zonePositions[zoneIndex].x; enemy.y = zonePositions[zoneIndex].y; enemies.push(enemy); game.addChild(enemy); } game.down = function (x, y, obj) { isDragging = true; lastShootX = x; lastShootY = y; }; game.move = function (x, y, obj) { if (isDragging) { // Calculate drag direction from last position var dx = x - lastShootX; var dy = y - lastShootY; var dist = Math.sqrt(dx * dx + dy * dy); // Move player in the direction of the drag, but slower if (dist > 0) { var moveScale = 0.5; // Increase speed to 50% of drag player.x += dx * moveScale; player.y += dy * moveScale; player.x = Math.max(30, Math.min(2018, player.x)); player.y = Math.max(30, Math.min(2702, player.y)); } lastShootX = x; lastShootY = y; } }; game.up = function (x, y, obj) { if (isDragging) { player.shoot(x, y); isDragging = false; } }; game.update = function () { // Update zones for (var i = zones.length - 1; i >= 0; i--) { zones[i].checkPlayerInside(player); } // Update player bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; if (bullet.lifetime <= 0 || bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) { bullet.destroy(); bullets.splice(i, 1); continue; } // Check collision with enemies for (var j = enemies.length - 1; j >= 0; j--) { if (bullet.intersects(enemies[j])) { bullet.destroy(); bullets.splice(i, 1); enemies[j].destroy(); enemies.splice(j, 1); // Spawn new enemy at a random non-captured zone position var availableZones = []; for (var k = 0; k < zones.length; k++) { if (!zones[k].captured) { availableZones.push(k); } } if (availableZones.length > 0) { var newEnemy = new Enemy(); var randomIndex = Math.floor(Math.random() * availableZones.length); var zoneIndex = availableZones[randomIndex]; newEnemy.x = zonePositions[zoneIndex].x; newEnemy.y = zonePositions[zoneIndex].y; enemies.push(newEnemy); game.addChild(newEnemy); } break; } } } // Update enemy bullets for (var i = enemyBullets.length - 1; i >= 0; i--) { var bullet = enemyBullets[i]; if (bullet.lifetime <= 0 || bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) { bullet.destroy(); enemyBullets.splice(i, 1); continue; } // Check collision with player if (bullet.intersects(player)) { bullet.destroy(); enemyBullets.splice(i, 1); player.takeDamage(); } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 15;
self.vx = 0;
self.vy = 0;
self.lifetime = 120;
self.update = function () {
self.x += self.vx;
self.y += self.vy;
self.lifetime--;
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.shootCooldown = 0;
self.moveTimer = 0;
// Start at a random non-captured zone position
var availableZones = [];
for (var k = 0; k < zones.length; k++) {
if (!zones[k].captured) {
availableZones.push(k);
}
}
if (availableZones.length > 0) {
var randomIndex = Math.floor(Math.random() * availableZones.length);
var zoneIndex = availableZones[randomIndex];
self.targetX = [512, 1536, 512, 1536][zoneIndex];
self.targetY = [683, 683, 2049, 2049][zoneIndex];
} else {
// If all zones are captured, default to center
self.targetX = 1024;
self.targetY = 1366;
}
self.update = function () {
// Move towards target position
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 20) {
self.x += dx / dist * self.speed;
self.y += dy / dist * self.speed;
}
// Change target position periodically
self.moveTimer++;
if (self.moveTimer > 180 || dist < 20) {
self.moveTimer = 0;
// Move to a random non-captured zone position
var availableZones = [];
for (var k = 0; k < zones.length; k++) {
if (!zones[k].captured) {
availableZones.push(k);
}
}
if (availableZones.length > 0) {
var randomIndex = Math.floor(Math.random() * availableZones.length);
var zoneIndex = availableZones[randomIndex];
self.targetX = [512, 1536, 512, 1536][zoneIndex];
self.targetY = [683, 683, 2049, 2049][zoneIndex];
}
}
// Shoot at player
if (self.shootCooldown > 0) {
self.shootCooldown--;
} else if (player) {
var pdx = player.x - self.x;
var pdy = player.y - self.y;
var pdist = Math.sqrt(pdx * pdx + pdy * pdy);
// Only attack when within 500 pixel proximity
if (pdist < 500) {
self.shoot(player.x, player.y);
}
}
};
self.shoot = function (targetX, targetY) {
var bullet = new Bullet();
bullet.x = self.x;
bullet.y = self.y;
var dx = targetX - self.x;
var dy = targetY - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
bullet.vx = dx / dist * bullet.speed;
bullet.vy = dy / dist * bullet.speed;
bullet.isEnemyBullet = true;
enemyBullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
self.shootCooldown = 60;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.shootCooldown = 0;
self.health = 10;
self.maxHealth = 10;
// Create health bar container
var healthBar = self.addChild(new Container());
healthBar.y = -playerGraphics.height / 2 - 20;
healthBar.visible = false;
// Health bar background
var healthBg = healthBar.attachAsset('zone', {
width: 80,
height: 12,
tint: 0x333333,
anchorX: 0.5,
anchorY: 0.5
});
// Health bar fill
var healthFill = healthBar.attachAsset('zone', {
width: 76,
height: 8,
tint: 0x00ff00,
anchorX: 0,
anchorY: 0.5
});
healthFill.x = -38;
self.healthBar = healthBar;
self.healthFill = healthFill;
self.healthBg = healthBg;
self.takeDamage = function () {
self.health--;
self.healthBar.visible = true;
// Update health bar width
self.healthFill.width = self.health / self.maxHealth * 76;
// Update health bar color based on health
if (self.health <= 3) {
self.healthFill.tint = 0xff0000;
} else if (self.health <= 6) {
self.healthFill.tint = 0xffaa00;
} else {
self.healthFill.tint = 0x00ff00;
}
// Flash effect
LK.effects.flashObject(self, 0xff0000, 300);
if (self.health <= 0) {
LK.showGameOver();
}
};
self.update = function () {
if (self.shootCooldown > 0) {
self.shootCooldown--;
}
};
self.shoot = function (targetX, targetY) {
// Magazine/cooldown logic
if (typeof playerMagazine !== "undefined" && typeof playerReloading !== "undefined") {
if (playerReloading) {
// Can't shoot while reloading
return;
}
if (playerMagazine <= 0) {
// Start reload if not already
if (!playerReloading) {
playerReloading = true;
// Track reload bar timing
if (typeof Date !== "undefined") {
reloadStartTime = Date.now();
reloadEndTime = reloadStartTime + playerReloadTime;
}
// Animate reload bar fill and bullet icons
if (typeof reloadBar !== "undefined") {
reloadBar.visible = true;
reloadFill.width = 0;
for (var i = 0; i < reloadBar.bulletIcons.length; i++) {
reloadBar.bulletIcons[i].alpha = 0.3;
reloadBar.bulletIcons[i].color = 0x888888;
}
}
playerReloadTimeout = LK.setTimeout(function () {
playerMagazine = playerMaxMagazine;
playerReloading = false;
reloadStartTime = 0;
reloadEndTime = 0;
// On reload complete, show all bullets as filled
if (typeof reloadBar !== "undefined") {
for (var i = 0; i < reloadBar.bulletIcons.length; i++) {
reloadBar.bulletIcons[i].alpha = 1;
reloadBar.bulletIcons[i].color = 0xffff00;
}
reloadFill.width = 200;
}
}, playerReloadTime);
}
return;
}
}
if (self.shootCooldown <= 0) {
// Use selected bullet type
var type = bulletTypes[currentBulletType];
var bullet = new Bullet();
bullet.x = self.x;
bullet.y = self.y;
// Change bullet asset and speed
if (type.id !== 'bullet') {
bullet.removeChild(bullet.children[0]);
var bulletGraphics = bullet.attachAsset(type.id, {
anchorX: 0.5,
anchorY: 0.5
});
bullet.speed = type.speed;
} else {
bullet.speed = type.speed;
}
var dx = targetX - self.x;
var dy = targetY - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
bullet.vx = dx / dist * bullet.speed;
bullet.vy = dy / dist * bullet.speed;
bullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
self.shootCooldown = 15;
// Decrement magazine
if (typeof playerMagazine !== "undefined") {
playerMagazine--;
if (playerMagazine <= 0) {
playerReloading = true;
playerReloadTimeout = LK.setTimeout(function () {
playerMagazine = playerMaxMagazine;
playerReloading = false;
}, playerReloadTime);
}
}
}
};
return self;
});
var Zone = Container.expand(function (zoneIndex) {
var self = Container.call(this);
var zoneAssetId = 'zone' + (zoneIndex + 1);
var zoneGraphics = self.attachAsset(zoneAssetId, {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.3
});
// Increase brightness using tween color effect (tint to a lighter color)
tween(zoneGraphics, {
tint: 0xffffff
}, {
duration: 500
});
self.graphics = zoneGraphics;
self.captureProgress = 0;
self.captureTime = 180;
self.captured = false;
self.playerInside = false;
var progressBar = self.addChild(new Container());
progressBar.y = -zoneGraphics.height / 2 - 30;
var progressBg = progressBar.attachAsset('zone', {
width: 300,
height: 20,
tint: 0x333333,
anchorX: 0.5,
anchorY: 0.5
});
var progressFill = progressBar.attachAsset('zone', {
width: 0,
height: 16,
tint: 0x00ff00,
anchorX: 0,
anchorY: 0.5
});
progressFill.x = -148;
self.progressFill = progressFill;
progressBar.visible = false;
self.progressBar = progressBar;
self.update = function () {
if (self.playerInside && !self.captured) {
self.captureProgress++;
self.progressBar.visible = true;
self.progressFill.width = self.captureProgress / self.captureTime * 296;
if (self.captureProgress >= self.captureTime) {
self.captured = true;
self.graphics.tint = 0x00ff00;
self.graphics.alpha = 0.5;
self.progressBar.visible = false;
LK.getSound('capture').play();
capturedZones++;
updateScore();
}
} else if (!self.playerInside && self.captureProgress > 0 && !self.captured) {
self.captureProgress = Math.max(0, self.captureProgress - 2);
if (self.captureProgress === 0) {
self.progressBar.visible = false;
} else {
self.progressFill.width = self.captureProgress / self.captureTime * 296;
}
}
};
self.checkPlayerInside = function (player) {
var halfWidth = self.graphics.width / 2;
var halfHeight = self.graphics.height / 2;
var dx = Math.abs(player.x - self.x);
var dy = Math.abs(player.y - self.y);
self.playerInside = dx < halfWidth && dy < halfHeight;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222222
});
/****
* Game Code
****/
var player;
var bullets = [];
var enemyBullets = [];
var enemies = [];
var zones = [];
var capturedZones = 0;
var totalZones = 4;
var isDragging = false;
var lastShootX = 0;
var lastShootY = 0;
// Bullet type switching
var bulletTypes = [{
id: 'bullet',
color: 0xffff00,
speed: 15,
size: 20
},
// normal
{
id: 'bullet_red',
color: 0xff4444,
speed: 10,
size: 32
},
// slow, big
{
id: 'bullet_blue',
color: 0x44aaff,
speed: 22,
size: 14
} // fast, small
];
var currentBulletType = 0;
if (typeof storage.getItem === "function" && storage.getItem("currentBulletType") !== undefined && storage.getItem("currentBulletType") !== null) {
currentBulletType = parseInt(storage.getItem("currentBulletType"));
}
// Dynamically create bullet assets if not already present
for (var i = 1; i < bulletTypes.length; i++) {
if (!LK.getAsset(bulletTypes[i].id, {})) {}
}
// UI for bullet type
var bulletTypeTxt = new Text2('Bullet: Normal', {
size: 60,
fill: 0xffffff
});
bulletTypeTxt.anchor.set(0.5, 0);
bulletTypeTxt.y = 120;
bulletTypeTxt.x = 1024;
LK.gui.top.addChild(bulletTypeTxt);
// Button to switch bullet type (simple text button)
var switchBtn = new Text2('Change Bullet', {
size: 60,
fill: 0x00ffcc
});
switchBtn.anchor.set(0.5, 0);
switchBtn.y = 210;
switchBtn.x = 1024;
LK.gui.top.addChild(switchBtn);
// Touch/click event for switchBtn
switchBtn.down = function (x, y, obj) {
currentBulletType = (currentBulletType + 1) % bulletTypes.length;
storage.set("currentBulletType", currentBulletType);
var names = ['Normal', 'Big', 'Fast'];
bulletTypeTxt.setText('Bullet: ' + names[currentBulletType]);
};
var scoreTxt = new Text2('Zones: 0/4', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
function updateScore() {
scoreTxt.setText('Zones: ' + capturedZones + '/' + totalZones);
if (capturedZones >= totalZones) {
LK.showYouWin();
}
;
// Update reload bar position and progress, animate fill and update bullet icons
if (typeof reloadBar !== "undefined" && typeof player !== "undefined") {
reloadBar.x = player.x;
reloadBar.y = player.y - 80;
// Update bullet icons: show filled for each bullet in magazine, empty for spent
if (typeof playerMagazine !== "undefined" && reloadBar.bulletIcons) {
for (var i = 0; i < reloadBar.bulletIcons.length; i++) {
if (i < playerMagazine && !playerReloading) {
reloadBar.bulletIcons[i].alpha = 1;
reloadBar.bulletIcons[i].color = 0xffff00;
} else {
reloadBar.bulletIcons[i].alpha = 0.3;
reloadBar.bulletIcons[i].color = 0x888888;
}
}
}
if (typeof playerReloading !== "undefined" && playerReloading) {
reloadBar.visible = true;
// Animate fill: (playerReloadTime - remaining) / playerReloadTime
if (typeof reloadStartTime !== "undefined" && typeof reloadEndTime !== "undefined" && reloadStartTime > 0 && reloadEndTime > reloadStartTime) {
var now = Date.now();
var progress = Math.min(1, Math.max(0, (now - reloadStartTime) / (reloadEndTime - reloadStartTime)));
reloadFill.width = 200 * progress;
// Animate bullet icons: fill them as reload progresses
var bulletsToShow = Math.floor(progress * 7);
for (var i = 0; i < reloadBar.bulletIcons.length; i++) {
if (i < bulletsToShow) {
reloadBar.bulletIcons[i].alpha = 1;
reloadBar.bulletIcons[i].color = 0xffff00;
} else {
reloadBar.bulletIcons[i].alpha = 0.3;
reloadBar.bulletIcons[i].color = 0x888888;
}
}
} else {
reloadFill.width = 0;
}
} else if (typeof playerReloading !== "undefined" && !playerReloading) {
reloadBar.visible = false;
reloadFill.width = 0;
}
}
}
;
// Magazine and cooldown for player shooting
var playerMagazine = 7;
var playerMaxMagazine = 7;
var playerReloading = false;
var playerReloadTimeout = null;
var playerReloadTime = 1500; // ms
// Track reload progress for bar
var reloadStartTime = 0;
var reloadEndTime = 0;
player = game.addChild(new Player());
player.x = 1024;
player.y = 1366;
// Reload progress bar UI above player, with 7 bullet icons and animated fill
var reloadBar = new Container();
// Background
var reloadBg = reloadBar.attachAsset('reloadBarBg', {
anchorX: 0.5,
anchorY: 0.5
});
// Animated fill (for reload progress)
var reloadFill = reloadBar.attachAsset('reloadBarFill', {
width: 0,
anchorX: 0,
anchorY: 0.5
});
reloadFill.x = -100;
reloadFill.y = 0;
// 7 bullet icons (small ellipses) spaced evenly
reloadBar.bulletIcons = [];
var bulletIconSpacing = 28;
var bulletIconStartX = -84;
for (var i = 0; i < 7; i++) {
var icon = reloadBar.attachAsset('bullet', {
width: 18,
height: 18,
anchorX: 0.5,
anchorY: 0.5,
color: 0xffff00
});
icon.x = bulletIconStartX + i * bulletIconSpacing;
icon.y = 0;
reloadBar.bulletIcons.push(icon);
}
reloadBar.visible = false;
game.addChild(reloadBar);
var zonePositions = [{
x: 512,
y: 683
}, {
x: 1536,
y: 683
}, {
x: 512,
y: 2049
}, {
x: 1536,
y: 2049
}];
for (var i = 0; i < zonePositions.length; i++) {
var zone = new Zone(i);
zone.x = zonePositions[i].x;
zone.y = zonePositions[i].y;
zones.push(zone);
game.addChild(zone);
}
// Spawn enemies at zone positions
for (var i = 0; i < 3; i++) {
var enemy = new Enemy();
var zoneIndex = i % zonePositions.length;
enemy.x = zonePositions[zoneIndex].x;
enemy.y = zonePositions[zoneIndex].y;
enemies.push(enemy);
game.addChild(enemy);
}
game.down = function (x, y, obj) {
isDragging = true;
lastShootX = x;
lastShootY = y;
};
game.move = function (x, y, obj) {
if (isDragging) {
// Calculate drag direction from last position
var dx = x - lastShootX;
var dy = y - lastShootY;
var dist = Math.sqrt(dx * dx + dy * dy);
// Move player in the direction of the drag, but slower
if (dist > 0) {
var moveScale = 0.5; // Increase speed to 50% of drag
player.x += dx * moveScale;
player.y += dy * moveScale;
player.x = Math.max(30, Math.min(2018, player.x));
player.y = Math.max(30, Math.min(2702, player.y));
}
lastShootX = x;
lastShootY = y;
}
};
game.up = function (x, y, obj) {
if (isDragging) {
player.shoot(x, y);
isDragging = false;
}
};
game.update = function () {
// Update zones
for (var i = zones.length - 1; i >= 0; i--) {
zones[i].checkPlayerInside(player);
}
// Update player bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
if (bullet.lifetime <= 0 || bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
// Check collision with enemies
for (var j = enemies.length - 1; j >= 0; j--) {
if (bullet.intersects(enemies[j])) {
bullet.destroy();
bullets.splice(i, 1);
enemies[j].destroy();
enemies.splice(j, 1);
// Spawn new enemy at a random non-captured zone position
var availableZones = [];
for (var k = 0; k < zones.length; k++) {
if (!zones[k].captured) {
availableZones.push(k);
}
}
if (availableZones.length > 0) {
var newEnemy = new Enemy();
var randomIndex = Math.floor(Math.random() * availableZones.length);
var zoneIndex = availableZones[randomIndex];
newEnemy.x = zonePositions[zoneIndex].x;
newEnemy.y = zonePositions[zoneIndex].y;
enemies.push(newEnemy);
game.addChild(newEnemy);
}
break;
}
}
}
// Update enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
if (bullet.lifetime <= 0 || bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (bullet.intersects(player)) {
bullet.destroy();
enemyBullets.splice(i, 1);
player.takeDamage();
}
}
};
Gangside ghetto Neighbourhood. In-Game asset. 2d. High contrast. No shadows
Tuğladan duvar üzerinde ballas grafitisi var,west side tarzında. In-Game asset. 2d. High contrast. No shadows
Tuğla duvar duvarda CJ's Gang yazacak. In-Game asset. 2d. High contrast. No shadows
CJ. In-Game asset. 2d. High contrast. No shadows
Ballas üyesi gang. In-Game asset. 2d. High contrast. No shadows