User prompt
horror mod tuşuna tıklayınca kanlı zombiler ortada olmasın oyuncu nerede olursa olsun horror mod tuşuna tıklayınca tam ortada doğsun ve önünde bir kanlı bıçak olsun o kanlı bıçakla bir kanlı zombi öldürürse o zaman tüm kanlı zombiler ona saldırsın
User prompt
Kanlı zombilerin yanına gidince karakterin hareket etmesine izin ver ve kanlı zombilerin yanındayken dev zombi , normal zombi olmasın eşya da olmasın oradaki teş şeyler kanlı zombiler kanlı bıçak ve biz
User prompt
yağmur daha az yağsın ve yağmur damlaları sayısını azaltarak oyundaki kasma dursun bilgisayarı ya da telefonu kasanlar için bir tane yağmuru kapatma tuşu ekle ve zombileri yavaşlatma tuşu ekle bu tuş oyundaki tüm zombileri level 1 hızlarına getirsin ve bu 2 tuş açıp kapanabilsin ama oyuna girince kapalı olarak başlasın ve Hack Kodu 7 : BOSS FIGHT! bu tuş bizi level 10 olunca başlayan BOSS FIGHT kısmına götürsün ve artık BOSS 120 mermi ile öldürülsün bıçağa gerek olmasın artık Kral Zombi ölebilsin. BOSS ölünce ekranda REAL FINISH!! yazsın yeşil renkte. Birde yeni Admin Hack 11 : /Horror Mode!! bu kod bizi level 1000 deki gizli kanlı zombilerin yanına gönderiyor ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
1000 score 2000 score 3000 score 4000 score 5000 score 6000 score 7000 score 8000 score 9000 score 10000 score olunca asker ev ve ağaç dışında herşey sıfırlansın ve oyun 3000 score olunca bitmesin 4000 score olunca level 4 , 5000 score olunca level 5 , 6000 score olunca level 6 , 7000 score olunca level 7 , 8000 score olunca level 8 , 9000 score olunca level 9 , 10000 score olunca level 10 olsun ama level 10 olunca herşey sıfırlansın asker ve evler dahil ekranın üstünde BOSS FIGHT!! kırmızı renkte yazsın Karşısında DEV bir Kral Zombi olsun oyuncunun BOSS ölmesi için 30 bıçak ve 90 mermi ile hasar verilmesi lazım. Yerde sadece bıçak ve pistol çıkabilir hem bize saldıran chicken jokey ve zombileri hem de BOSS öldürmemiz lazım eğer BOSS ölmezse oyun ASLA BİTMEZ ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Admin paneli rewind tuşuna tıklayınca yok olmasın ve Admin Hack 8 : /summon chicken jockey bu komut chicken-jokey karakterini çağırsın Chicken Jokey : sadece 2200 score olunca gelir ve hızlıdır yani en azından zombilerden daha hızlı karaktere vurunca -25 canını götürür ve 2 açlık götürür.2900 score yapınca yok olur ve bir daha gelmez. Admin Hack 9 : /summon King Zombie bu komut Kral Zombiyi çağırır Kral Zombie : Ölümsüzdür Fakat oyuncuya saldırmaz sadece yerinde durur. Arada bir zombileri yanına getirir zombiler biraz onun yanında hareket etmeden dururlar. Ondan sonra oyuncuya saldırmaya devam ederler. Admin Hack 10 : /summon King Zombie no AI bu komut Kral Zombiyi çağırır ama yapay zekasız zombilere herhangi bir komut veremez ya da hareket edemez. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
eğer 10 kere /Admin tuşuna tıklarsak ekranın sol altının çok az üstünde Level Hack tuşunun üstünde Admin Hack 1 : /level 999 tuşu çıksın bu tuşa tıklayınca 999 levele gelelim Admin Hack 2 : /give knife bu tuşa tıklayınca sonsuz bıçağımız olsun Admin Hack 3 : /summon zombie bu tuş bir tane zombi spawnlasın Admin Hack 4 : /summon zombie no AI bu tuş bir tane zombi spawnlasın ama yapay zekası olmayan hareket etmeyen bir zombi Admin Hack 5 : /summon big zombie bu tuş bir tane big zombi spawnlasın Admin Hack 6 : /summon big zombie no AI bu tuş bir tane big zombi spawnlasın ama yapay zekası olmayan hareket etmeyen bir big zombi Admin Hack 4 : /summon tree no AI bu tuş bir tane ağaç spawnlasın ama yapay zekası olmayan hareket etmeyen bir ağaç ve şimşek çarpmayan
User prompt
level 200 olduktan sonra zombiler gelmesin ve hack yerine bir hile kodu daha ekliyeceğim Hile Kodu 5 : /kill zombies and Big Zombies bu hile tüm zombileri ve büyük zombileri öldürür ve bir daha gelmemelerini sağlar Hile Kodu 6 : /delete rain bu kodu yazınca bir daha yağmur yağmaz ve o zaman yağmur ise biter. Birde level Hack tuşu ekranın ortasında duruyor sol alt köşenin biraz yukarısına koy
User prompt
level 1000 olunca karakteri hareket ettiremiyoruz bu hatayı düzelt ve level 1000 olunca normal zombiler gelmesin ve silah ile bıçak çıkmasın sadece kanlı hareket etmeyen kanlı zombiler olsun ama yerdeki bıçakla kanlı zombi öldürürsek hepsi bizim üstümüze koşup bizi öldürsün
User prompt
artık ekranda STOP! yazdığında level hack tuşuna tıklayabiliyoruz 5 kere level hack tuşuna basarksak STOP! yazısı yok oluyor ve hareket edebiliyoruz eğer level 1000 olursak ise oyundaki herşey siliniyor ve etrafta kanlar oluyor artık hack tuşu ve rewind tuşu yok onların yerine I WANT YOU TO DIE yazsın etrafta kanlı zombiler olsun ama hareket etmesinler yerde ise silinmeyen bir bıçak olsun o bıçağı alıp bir kanlı zombi öldürürsek ekranda kocaman I WANT YOU TO DIE yazsın arkaplanda ise korkutucu bir müzik olsun tüm kanlı zombiler bize saldırsın toplamda 30 kanlı zombi olucak ↪💡 Consider importing and using the following plugins: @upit/tween.v1, @upit/storage.v1
User prompt
Big-zombie 300 600 900 1200 1500 1800 2100 2400 2700 3000 3300 3600 3900 4200 4500 4800 5100 5400 5700 6000 6300 6600 6900 ve 7200 score yapınca gelsin ve ölmeden kendisi asla yok olmasın ölmesi için 5 kere bıçak saplamamız lazım mermi ona zarar vermez ona çarpan tank yok olur
User prompt
Kaslı ve Güçlü zombiyi ayrı bir karakter olarak ekle yavaş olsun ama oyuncuya vurunca -30 canını götürsün ve dev çürük eti de ekle açlık barımızdan 5 açlık gitsin ama canımız tam olsun ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
oyuna REWIND tuşu ekle basınca oyun sıfırlansın güçlü ve kaslı yeşil bir zombi ekle bu yaratık her 300 score yapınca 1 kere gelsin ama yavaş yürüsün oyuncunun canından -30 azaltsın vurunca silah mermisi işlemesin 5 kere bıçak saplayınca ölsün ve içinden canımızı fulleyen dev bir çürük et çıksın ve oyuna açlık barı ekle health göstercesinin altında olsun dev çürük et açlık barımızdan 5 açlık götürsün toplam açlıklar 10 eğer 10 açlığımızda biterse canımız 5 saniyede bir 10 azalsın normal et yiyince açlık barı 1 artsın ama 5 saniye boyunca yeşil olsun ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Peki chati kaldır onun yerine hack butonu ekle o butona basınca /Immortality /Finish the Game /Admin /Level Hack butonları çıksın bunlardan birine basınca söylediğim özellikler aktif olsun
User prompt
Chate yazı yazamıyoruzbunu düzelt
User prompt
Oyunda yazı yazılabilir bir sohbet olsun ve oraya yazılabilir hile komutları Hile Kodu 1 : /Immortality bunu yazınca Health kısmında FOREVER yazsın ve ana karakter Ölümsüz olsun zombi veya şimşek kısaca hiçbirşey onun canını azaltamasın.Hile Kodu 2 : /Level Hack bunu yazınca bir tuş gelsin tuşun üzerinde Level Hack yazıyor her o tuşa tıkladığımızda level 1 artıyor eğer 100 levele kadar basarsak Ekranda STOP! yazsın ve oyundan çıkmadan hiçbir şeye tıklayamayalım ve hareket edemeyelim oyuna tekrar girince düzelsin Hile Kodu 3 : /Admin bunu yazınca levelin sayısını istediğimiz gibi yapalım mesela level 1 ise onu level 100 veya daha fazla yapabilelim aynı şekilde canımızıda ayarlayabilelim ve ağaç,ev,askerler,zombiler,bıçak veya başka şeyler bunların hepsinin boyunu ve yerini değiştirebilelim sanki oyunu biz yapmışız gibi Hile Kodu 4 : /Finish the Game bunu yazınca ekranda FINISH! yazsın ve level 3 olsun
User prompt
çürük et ve pistol 5 saniye sonra yok olsun ve bu sayede oyun kasmasın.level 3 3000 score yapınca bitsin ve ekranda OYUN BİTTİ yazsın 6 saniye sonra OYUN BİTTİ yazısı yok olsun ve oyun kendini level 1e kadar sıfırlasın tüm zombiler ve yerdeki itemler yok olsun Meat sayacı dışında herşey sıfırlansın ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
ilk bölüm 1000 score gelince bitsin ve ekranda KAZANDIN yazsın altında ise bölüm 2 yazan bir tuş olsun tıklayınca bölüm 1 gibi ama sadece herşeyin olma oranı az artıcak bölüm 3 2000 score olunca açılsın ekranda VAY CANINA yazsın ve altında devam edecek yazsın ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
yağmur damlaları oyunu kastırıyor yağmur damlalarını azalt. oyuna askerler ekle ve askerlerin arkasına bir sürü ev ekle askerlerin amacı zombileri ateş edip öldürmek ve şehri korumak zombiler askerlere de saldırsın ve bir tank 1 dakika sonra gelip zombileri ezsin sonra daha fazla zombi gelsin tank yine 1 dakika sonra gelsin ve bazı zombileri ezsin ondan sonra yerde 30 mermili pistollar çıksın ve biz o pistolu alıp zombileri vuralım ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
arada yağmur yağsın ve 100/50 ihtimal ile zombilerin kafasına yıldırım düşsün ve haritanın bazı yerlerine ağaç gelsin fakat oyuna başlar başlamaz gelsin 100/70 ihtimal ağaçlara şimşek çarpsın ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
zombi öldürünce yere çürük et düşsün ve alan genişlesin başka yerlerde ev bulu saklanalım zombiler eve yaklaşamasın
User prompt
oyunu kuş bakışı yerine yan açıdan yap ve parkurlar yapmamız gereksin arkadan gelen zombi ordusu her parkur için birkaç kişiyi feda edip onlar ile zombi köprüsü yapsın
User prompt
bu sefer ise oyunu durdurma tuşu ile iç içe oluyor oyunu durdurma tuşunun biraz altına al bıçak kullanma haklarını
User prompt
score tabelası ve bıçak kullanma hakkı birbiriyle iç içe girmesin
User prompt
arada 5 kullanımlık bir bıçak çıksın ve zombileri öldürmemize yarasın
Code edit (1 edits merged)
Please save this source code
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var House = Container.expand(function () {
var self = Container.call(this);
var houseGraphics = self.attachAsset('house', {
anchorX: 0.5,
anchorY: 1.0
});
self.safeRadius = 200; // Safe zone around house
return self;
});
var Lightning = Container.expand(function () {
var self = Container.call(this);
var lightningGraphics = self.attachAsset('lightning', {
anchorX: 0.5,
anchorY: 0.5
});
self.lifetime = 10; // Very short flash
lightningGraphics.alpha = 0.8;
self.update = function () {
self.lifetime--;
if (self.lifetime <= 0) {
self.destroy();
}
};
return self;
});
var Pistol = Container.expand(function () {
var self = Container.call(this);
var pistolGraphics = self.attachAsset('pistol', {
anchorX: 0.5,
anchorY: 0.5
});
self.ammo = 30;
self.lifetime = 600; // 10 seconds at 60fps
self.update = function () {
self.lifetime--;
if (self.lifetime <= 0) {
self.destroy();
}
// Small rotation animation
pistolGraphics.rotation += 0.02;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 100;
self.maxHealth = 100;
self.speed = 1.0;
self.shielded = false;
self.shieldTime = 0;
self.hasKnife = false;
self.knifeUses = 0;
self.update = function () {
if (self.shielded) {
self.shieldTime--;
if (self.shieldTime <= 0) {
self.shielded = false;
playerGraphics.tint = 0xFFFFFF;
}
}
};
self.takeDamage = function (amount) {
if (!self.shielded) {
self.health -= amount;
LK.getSound('damage').play();
LK.effects.flashObject(self, 0xff0000, 500);
if (self.health <= 0) {
self.health = 0;
LK.showGameOver();
}
}
};
self.activateShield = function () {
self.shielded = true;
self.shieldTime = 300; // 5 seconds at 60fps
playerGraphics.tint = 0x00FFFF;
};
self.activateKnife = function () {
self.hasKnife = true;
self.knifeUses = 5;
playerGraphics.tint = 0xFFFF00;
};
self.useKnife = function () {
if (self.hasKnife && self.knifeUses > 0) {
self.knifeUses--;
LK.getSound('knife').play();
if (self.knifeUses <= 0) {
self.hasKnife = false;
playerGraphics.tint = 0xFFFFFF;
}
return true;
}
return false;
};
return self;
});
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
bulletGraphics.tint = 0x00FF00; // Green bullets for player
self.velocityX = 0;
self.velocityY = 0;
self.lifetime = 120; // 2 seconds at 60fps
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
self.lifetime--;
if (self.lifetime <= 0 || self.x < -50 || self.x > 2098 || self.y < -50 || self.y > 2782) {
self.destroy();
}
};
return self;
});
var PowerUp = Container.expand(function (type) {
var self = Container.call(this);
var powerUpGraphics = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 0.5
});
self.type = type;
self.lifetime = 600; // 10 seconds at 60fps
self.update = function () {
self.lifetime--;
if (self.lifetime <= 0) {
self.destroy();
}
// Pulse effect
var scale = 1 + Math.sin(LK.ticks * 0.1) * 0.2;
powerUpGraphics.scaleX = scale;
powerUpGraphics.scaleY = scale;
};
return self;
});
var Raindrop = Container.expand(function () {
var self = Container.call(this);
var dropGraphics = self.attachAsset('raindrop', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8 + Math.random() * 4;
self.update = function () {
self.y += self.speed;
// Remove when off screen
if (self.y > 2800) {
self.destroy();
}
};
return self;
});
var RottenMeat = Container.expand(function () {
var self = Container.call(this);
var meatGraphics = self.attachAsset('rottenMeat', {
anchorX: 0.5,
anchorY: 0.5
});
self.lifetime = 1200; // 20 seconds at 60fps
self.update = function () {
self.lifetime--;
if (self.lifetime <= 0) {
self.destroy();
}
// Small bounce effect
var bounce = Math.sin(LK.ticks * 0.1) * 2;
meatGraphics.y = bounce;
};
return self;
});
var Soldier = Container.expand(function () {
var self = Container.call(this);
var soldierGraphics = self.attachAsset('soldier', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 50;
self.maxHealth = 50;
self.shootTimer = 0;
self.shootCooldown = 60; // 1 second at 60fps
self.range = 300;
self.update = function () {
self.shootTimer--;
if (self.shootTimer <= 0) {
// Find closest zombie within range
var closestZombie = null;
var closestDistance = Infinity;
for (var z = 0; z < zombies.length; z++) {
var zombie = zombies[z];
var distance = Math.sqrt(Math.pow(zombie.x - self.x, 2) + Math.pow(zombie.y - self.y, 2));
if (distance < self.range && distance < closestDistance) {
closestDistance = distance;
closestZombie = zombie;
}
}
if (closestZombie) {
// Shoot at zombie
var bullet = new SoldierBullet();
bullet.x = self.x;
bullet.y = self.y;
var dx = closestZombie.x - self.x;
var dy = closestZombie.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
bullet.velocityX = dx / distance * 8;
bullet.velocityY = dy / distance * 8;
}
soldierBullets.push(bullet);
game.addChild(bullet);
LK.getSound('gunshot').play();
self.shootTimer = self.shootCooldown;
}
}
};
self.takeDamage = function (amount) {
self.health -= amount;
LK.effects.flashObject(self, 0xff0000, 300);
if (self.health <= 0) {
self.destroy();
}
};
return self;
});
var SoldierBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.lifetime = 180; // 3 seconds at 60fps
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
self.lifetime--;
if (self.lifetime <= 0 || self.x < -50 || self.x > 2098 || self.y < -50 || self.y > 2782) {
self.destroy();
}
};
return self;
});
var Tank = Container.expand(function () {
var self = Container.call(this);
var tankGraphics = self.attachAsset('tank', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.targetX = 1024;
self.targetY = 1366;
self.crushRadius = 80;
self.update = function () {
// Move towards center of map
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 5) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
// Crush zombies
for (var z = zombies.length - 1; z >= 0; z--) {
var zombie = zombies[z];
var zombieDistance = Math.sqrt(Math.pow(zombie.x - self.x, 2) + Math.pow(zombie.y - self.y, 2));
if (zombieDistance < self.crushRadius) {
LK.setScore(LK.getScore() + 15);
dropRottenMeat(zombie.x, zombie.y);
zombie.destroy();
zombies.splice(z, 1);
}
}
};
return self;
});
var Tree = Container.expand(function () {
var self = Container.call(this);
var treeGraphics = self.attachAsset('tree', {
anchorX: 0.5,
anchorY: 1.0
});
self.isOnFire = false;
self.fireTime = 0;
self.strikeWithLightning = function () {
self.isOnFire = true;
self.fireTime = 300; // 5 seconds at 60fps
treeGraphics.tint = 0xFF4500; // Orange fire color
LK.getSound('lightning').play();
LK.effects.flashObject(self, 0xFFFF00, 200);
};
self.update = function () {
if (self.isOnFire) {
self.fireTime--;
if (self.fireTime <= 0) {
self.isOnFire = false;
treeGraphics.tint = 0xFFFFFF;
}
}
};
return self;
});
var Zombie = Container.expand(function () {
var self = Container.call(this);
var zombieGraphics = self.attachAsset('zombie', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 1;
self.targetX = 0;
self.targetY = 0;
self.update = function () {
var dx = self.targetX - self.x;
var dy = self.targetY - 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;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2E7D32
});
/****
* Game Code
****/
game.setBackgroundColor(0x1B5E20);
var player = game.addChild(new Player());
player.x = 1024;
player.y = 1366;
var zombies = [];
var powerUps = [];
var rottenMeats = [];
var houses = [];
var trees = [];
var raindrops = [];
var lightnings = [];
var soldiers = [];
var soldierBullets = [];
var playerBullets = [];
var pistols = [];
var tank = null;
var tankSpawnTimer = 3600; // 1 minute at 60fps
var dragNode = null;
var playerHasPistol = false;
var playerAmmo = 0;
var survivalTime = 0;
var meatCollected = 0;
var safeZoneRadius = 200;
var zombieSpawnRate = 120; // Start spawning every 2 seconds
var minZombieSpawnRate = 30; // Fastest spawn rate
var zombieSpeed = 1;
var maxZombieSpeed = 4;
var isRaining = false;
var rainTimer = 0;
var lightningTimer = 0;
// UI Elements
var healthTxt = new Text2('Health: 100', {
size: 60,
fill: 0xFFFFFF
});
healthTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(healthTxt);
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var timeTxt = new Text2('Time: 0s', {
size: 60,
fill: 0xFFFFFF
});
timeTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(timeTxt);
var knifeTxt = new Text2('', {
size: 60,
fill: 0xFFFF00
});
knifeTxt.anchor.set(0, 0);
knifeTxt.y = 140; // Position below pause button
LK.gui.topLeft.addChild(knifeTxt);
var meatTxt = new Text2('Meat: 0', {
size: 60,
fill: 0x8B4513
});
meatTxt.anchor.set(0, 0);
meatTxt.y = 200; // Position below knife counter
LK.gui.topLeft.addChild(meatTxt);
var ammoTxt = new Text2('', {
size: 60,
fill: 0x00FF00
});
ammoTxt.anchor.set(0, 0);
ammoTxt.y = 260; // Position below meat counter
LK.gui.topLeft.addChild(ammoTxt);
// Spawn initial house
spawnHouse();
function spawnSoldiers() {
for (var h = 0; h < houses.length; h++) {
var house = houses[h];
// Spawn 2-3 soldiers behind each house
var soldierCount = 2 + Math.floor(Math.random() * 2);
for (var s = 0; s < soldierCount; s++) {
var soldier = new Soldier();
soldier.x = house.x + (Math.random() - 0.5) * 150;
soldier.y = house.y + 50 + Math.random() * 50;
soldiers.push(soldier);
game.addChild(soldier);
}
}
}
function spawnTank() {
if (tank) return; // Only one tank at a time
tank = new Tank();
// Spawn from random edge
var edge = Math.floor(Math.random() * 4);
switch (edge) {
case 0:
// Top
tank.x = Math.random() * 2048;
tank.y = -100;
break;
case 1:
// Right
tank.x = 2148;
tank.y = Math.random() * 2732;
break;
case 2:
// Bottom
tank.x = Math.random() * 2048;
tank.y = 2832;
break;
case 3:
// Left
tank.x = -100;
tank.y = Math.random() * 2732;
break;
}
game.addChild(tank);
LK.getSound('tankEngine').play();
}
function spawnPistol() {
var pistol = new Pistol();
pistol.x = Math.random() * (2048 - 100) + 50;
pistol.y = Math.random() * (2732 - 200) + 100;
pistols.push(pistol);
game.addChild(pistol);
}
// Spawn initial soldiers
spawnSoldiers();
function spawnTree() {
var tree = new Tree();
var validPosition = false;
var attempts = 0;
while (!validPosition && attempts < 20) {
tree.x = Math.random() * (2048 - 120) + 60;
tree.y = Math.random() * (2732 - 200) + 150;
validPosition = true;
// Check distance from houses and other trees
for (var h = 0; h < houses.length; h++) {
var distance = Math.sqrt(Math.pow(tree.x - houses[h].x, 2) + Math.pow(tree.y - houses[h].y, 2));
if (distance < 200) {
validPosition = false;
break;
}
}
for (var t = 0; t < trees.length; t++) {
var distance = Math.sqrt(Math.pow(tree.x - trees[t].x, 2) + Math.pow(tree.y - trees[t].y, 2));
if (distance < 100) {
validPosition = false;
break;
}
}
attempts++;
}
trees.push(tree);
game.addChild(tree);
}
function createRain() {
for (var r = 0; r < 2; r++) {
var raindrop = new Raindrop();
raindrop.x = Math.random() * 2048;
raindrop.y = -20;
raindrops.push(raindrop);
game.addChild(raindrop);
}
}
function createLightning(x, y) {
var lightning = new Lightning();
lightning.x = x;
lightning.y = y;
lightnings.push(lightning);
game.addChild(lightning);
LK.getSound('thunder').play();
LK.effects.flashScreen(0xFFFFFF, 200);
}
// Spawn initial trees
for (var t = 0; t < 8; t++) {
spawnTree();
}
function spawnZombie() {
var zombie = new Zombie();
// Spawn from random edge
var edge = Math.floor(Math.random() * 4);
switch (edge) {
case 0:
// Top
zombie.x = Math.random() * 2048;
zombie.y = -50;
break;
case 1:
// Right
zombie.x = 2098;
zombie.y = Math.random() * 2732;
break;
case 2:
// Bottom
zombie.x = Math.random() * 2048;
zombie.y = 2782;
break;
case 3:
// Left
zombie.x = -50;
zombie.y = Math.random() * 2732;
break;
}
zombie.speed = zombieSpeed + Math.random() * 0.5;
zombie.targetX = player.x;
zombie.targetY = player.y;
zombies.push(zombie);
game.addChild(zombie);
}
function spawnPowerUp() {
var types = ['speedBoost', 'shield', 'extraPoints', 'knife'];
var type = types[Math.floor(Math.random() * types.length)];
var powerUp = new PowerUp(type);
powerUp.x = Math.random() * (2048 - 100) + 50;
powerUp.y = Math.random() * (2732 - 200) + 100;
powerUps.push(powerUp);
game.addChild(powerUp);
}
function spawnHouse() {
var house = new House();
// Place houses away from edges and other houses
var validPosition = false;
var attempts = 0;
while (!validPosition && attempts < 20) {
house.x = Math.random() * (2048 - 300) + 150;
house.y = Math.random() * (2732 - 300) + 200;
validPosition = true;
// Check distance from other houses
for (var h = 0; h < houses.length; h++) {
var distance = Math.sqrt(Math.pow(house.x - houses[h].x, 2) + Math.pow(house.y - houses[h].y, 2));
if (distance < 400) {
validPosition = false;
break;
}
}
attempts++;
}
houses.push(house);
game.addChild(house);
}
function dropRottenMeat(x, y) {
var meat = new RottenMeat();
meat.x = x + (Math.random() - 0.5) * 50;
meat.y = y + (Math.random() - 0.5) * 50;
rottenMeats.push(meat);
game.addChild(meat);
}
function isPlayerInSafeZone() {
for (var h = 0; h < houses.length; h++) {
var distance = Math.sqrt(Math.pow(player.x - houses[h].x, 2) + Math.pow(player.y - houses[h].y, 2));
if (distance < safeZoneRadius) {
return true;
}
}
return false;
}
function handleMove(x, y, obj) {
if (dragNode) {
// Apply speed multiplier
var targetX = x;
var targetY = y;
// Smooth movement with speed
var dx = targetX - dragNode.x;
var dy = targetY - dragNode.y;
dragNode.x += dx * 0.1 * dragNode.speed;
dragNode.y += dy * 0.1 * dragNode.speed;
// Keep player within bounds
dragNode.x = Math.max(40, Math.min(2008, dragNode.x));
dragNode.y = Math.max(40, Math.min(2692, dragNode.y));
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Check if player has pistol and ammo
if (playerHasPistol && playerAmmo > 0) {
// Shoot towards touch/click position
var bullet = new PlayerBullet();
bullet.x = player.x;
bullet.y = player.y;
var dx = x - player.x;
var dy = y - player.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
bullet.velocityX = dx / distance * 10;
bullet.velocityY = dy / distance * 10;
}
playerBullets.push(bullet);
game.addChild(bullet);
LK.getSound('gunshot').play();
playerAmmo--;
if (playerAmmo <= 0) {
playerHasPistol = false;
}
} else {
// Normal movement
dragNode = player;
handleMove(x, y, obj);
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
survivalTime++;
// Update score and UI
var timeInSeconds = Math.floor(survivalTime / 60);
var score = Math.floor(survivalTime / 10) + LK.getScore();
var healthText = 'Health: ' + player.health;
healthTxt.setText(healthText);
// Update knife display separately
if (player.hasKnife && player.knifeUses > 0) {
knifeTxt.setText('Knife: ' + player.knifeUses);
} else {
knifeTxt.setText('');
}
scoreTxt.setText('Score: ' + score);
timeTxt.setText('Time: ' + timeInSeconds + 's');
// Increase difficulty over time
if (survivalTime % 600 == 0) {
// Every 10 seconds
if (zombieSpawnRate > minZombieSpawnRate) {
zombieSpawnRate -= 5;
}
if (zombieSpeed < maxZombieSpeed) {
zombieSpeed += 0.2;
}
}
// Spawn zombies
if (survivalTime % zombieSpawnRate == 0) {
spawnZombie();
}
// Spawn power-ups occasionally
if (survivalTime > 300 && Math.random() < 0.002) {
spawnPowerUp();
}
// Update zombie targets
for (var i = zombies.length - 1; i >= 0; i--) {
var zombie = zombies[i];
// Check if player is in safe zone
var playerInSafeZone = isPlayerInSafeZone();
if (playerInSafeZone) {
// Find closest house edge to target instead of player directly
var closestHouse = null;
var closestDistance = Infinity;
for (var h = 0; h < houses.length; h++) {
var houseDistance = Math.sqrt(Math.pow(player.x - houses[h].x, 2) + Math.pow(player.y - houses[h].y, 2));
if (houseDistance < safeZoneRadius && houseDistance < closestDistance) {
closestDistance = houseDistance;
closestHouse = houses[h];
}
}
if (closestHouse) {
// Target edge of safe zone instead of player
var dx = player.x - closestHouse.x;
var dy = player.y - closestHouse.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
zombie.targetX = closestHouse.x + dx / distance * (safeZoneRadius + 20);
zombie.targetY = closestHouse.y + dy / distance * (safeZoneRadius + 20);
} else {
zombie.targetX = player.x;
zombie.targetY = player.y;
}
} else {
zombie.targetX = player.x;
zombie.targetY = player.y;
}
} else {
zombie.targetX = player.x;
zombie.targetY = player.y;
}
// Check collision with player
if (zombie.intersects(player)) {
if (player.useKnife()) {
// Knife kills zombie and gives points
LK.setScore(LK.getScore() + 10);
dropRottenMeat(zombie.x, zombie.y); // Drop meat when killed
zombie.destroy();
zombies.splice(i, 1);
} else {
// No knife, take damage only if not in safe zone
if (!isPlayerInSafeZone()) {
player.takeDamage(10);
}
zombie.destroy();
zombies.splice(i, 1);
}
continue;
}
// Remove zombies that are too far away
var distanceFromPlayer = Math.sqrt(Math.pow(zombie.x - player.x, 2) + Math.pow(zombie.y - player.y, 2));
if (distanceFromPlayer > 3000) {
zombie.destroy();
zombies.splice(i, 1);
}
}
// Check power-up collisions
for (var j = powerUps.length - 1; j >= 0; j--) {
var powerUp = powerUps[j];
if (powerUp.intersects(player)) {
LK.getSound('powerup').play();
switch (powerUp.type) {
case 'speedBoost':
player.speed = 1.5;
tween(player, {
speed: 1.0
}, {
duration: 3000
});
break;
case 'shield':
player.activateShield();
break;
case 'extraPoints':
LK.setScore(LK.getScore() + 50);
break;
case 'knife':
player.activateKnife();
break;
}
powerUp.destroy();
powerUps.splice(j, 1);
}
if (powerUp.lifetime <= 0) {
powerUps.splice(j, 1);
}
}
// Check rotten meat collisions
for (var m = rottenMeats.length - 1; m >= 0; m--) {
var meat = rottenMeats[m];
if (meat.intersects(player)) {
meatCollected++;
safeZoneRadius += 5; // Expand safe zone with each meat collected
LK.getSound('powerup').play();
meat.destroy();
rottenMeats.splice(m, 1);
// Spawn new house every 10 meat collected
if (meatCollected % 10 === 0 && houses.length < 5) {
spawnHouse();
}
continue;
}
if (meat.lifetime <= 0) {
rottenMeats.splice(m, 1);
}
}
// Weather system
if (!isRaining && Math.random() < 0.001) {
// Start rain
isRaining = true;
rainTimer = 600 + Math.random() * 600; // Rain for 10-20 seconds
}
if (isRaining) {
rainTimer--;
if (rainTimer <= 0) {
isRaining = false;
} else {
// Create raindrops (reduced frequency)
if (survivalTime % 8 == 0) {
createRain();
}
}
}
// Lightning strikes during rain
if (isRaining && Math.random() < 0.005) {
// Lightning on zombies (100/50 chance)
if (zombies.length > 0 && Math.random() < 0.5) {
var randomZombie = zombies[Math.floor(Math.random() * zombies.length)];
createLightning(randomZombie.x, randomZombie.y - 100);
// Kill the zombie
LK.setScore(LK.getScore() + 20);
dropRottenMeat(randomZombie.x, randomZombie.y);
randomZombie.destroy();
zombies.splice(zombies.indexOf(randomZombie), 1);
}
// Lightning on trees (100/70 chance)
if (trees.length > 0 && Math.random() < 0.7) {
var randomTree = trees[Math.floor(Math.random() * trees.length)];
createLightning(randomTree.x, randomTree.y - 60);
randomTree.strikeWithLightning();
}
}
// Clean up raindrops
for (var r = raindrops.length - 1; r >= 0; r--) {
if (raindrops[r].y > 2800) {
raindrops.splice(r, 1);
}
}
// Clean up lightning
for (var l = lightnings.length - 1; l >= 0; l--) {
if (lightnings[l].lifetime <= 0) {
lightnings.splice(l, 1);
}
}
// Tank spawning logic
tankSpawnTimer--;
if (tankSpawnTimer <= 0) {
spawnTank();
tankSpawnTimer = 3600; // Reset to 1 minute
}
// Remove tank after some time and increase zombie spawn
if (tank) {
var tankDistance = Math.sqrt(Math.pow(tank.x - tank.targetX, 2) + Math.pow(tank.y - tank.targetY, 2));
if (tankDistance < 50) {
// Tank reached center, remove it and spawn more zombies
tank.destroy();
tank = null;
// Spawn extra zombies after tank leaves
for (var tz = 0; tz < 5; tz++) {
spawnZombie();
}
}
}
// Update soldiers
for (var s = soldiers.length - 1; s >= 0; s--) {
var soldier = soldiers[s];
if (soldier.health <= 0) {
soldiers.splice(s, 1);
continue;
}
// Soldier takes damage from nearby zombies
for (var z = 0; z < zombies.length; z++) {
var zombie = zombies[z];
var distance = Math.sqrt(Math.pow(zombie.x - soldier.x, 2) + Math.pow(zombie.y - soldier.y, 2));
if (distance < 30) {
soldier.takeDamage(5);
break;
}
}
}
// Update soldier bullets
for (var sb = soldierBullets.length - 1; sb >= 0; sb--) {
var bullet = soldierBullets[sb];
if (bullet.lifetime <= 0) {
soldierBullets.splice(sb, 1);
continue;
}
// Check collision with zombies
for (var z = zombies.length - 1; z >= 0; z--) {
var zombie = zombies[z];
if (bullet.intersects(zombie)) {
LK.setScore(LK.getScore() + 10);
dropRottenMeat(zombie.x, zombie.y);
zombie.destroy();
zombies.splice(z, 1);
bullet.destroy();
soldierBullets.splice(sb, 1);
break;
}
}
}
// Update player bullets
for (var pb = playerBullets.length - 1; pb >= 0; pb--) {
var bullet = playerBullets[pb];
if (bullet.lifetime <= 0) {
playerBullets.splice(pb, 1);
continue;
}
// Check collision with zombies
for (var z = zombies.length - 1; z >= 0; z--) {
var zombie = zombies[z];
if (bullet.intersects(zombie)) {
LK.setScore(LK.getScore() + 15);
dropRottenMeat(zombie.x, zombie.y);
zombie.destroy();
zombies.splice(z, 1);
bullet.destroy();
playerBullets.splice(pb, 1);
break;
}
}
}
// Check pistol collisions with player
for (var p = pistols.length - 1; p >= 0; p--) {
var pistol = pistols[p];
if (pistol.intersects(player)) {
playerHasPistol = true;
playerAmmo = pistol.ammo;
LK.getSound('powerup').play();
pistol.destroy();
pistols.splice(p, 1);
continue;
}
if (pistol.lifetime <= 0) {
pistols.splice(p, 1);
}
}
// Spawn pistols after tank visits
if (survivalTime > 3600 && Math.random() < 0.003) {
spawnPistol();
}
// Spawn new soldiers when houses are built
if (meatCollected % 10 === 0 && survivalTime % 60 === 0 && houses.length > soldiers.length / 2) {
spawnSoldiers();
}
// Update UI
meatTxt.setText('Meat: ' + meatCollected);
if (playerHasPistol && playerAmmo > 0) {
ammoTxt.setText('Ammo: ' + playerAmmo);
} else {
ammoTxt.setText('');
}
};
LK.playMusic('bgmusic'); ===================================================================
--- original.js
+++ change.js
@@ -30,8 +30,26 @@
}
};
return self;
});
+var Pistol = Container.expand(function () {
+ var self = Container.call(this);
+ var pistolGraphics = self.attachAsset('pistol', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.ammo = 30;
+ self.lifetime = 600; // 10 seconds at 60fps
+ self.update = function () {
+ self.lifetime--;
+ if (self.lifetime <= 0) {
+ self.destroy();
+ }
+ // Small rotation animation
+ pistolGraphics.rotation += 0.02;
+ };
+ return self;
+});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
@@ -87,8 +105,28 @@
return false;
};
return self;
});
+var PlayerBullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bulletGraphics = self.attachAsset('bullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ bulletGraphics.tint = 0x00FF00; // Green bullets for player
+ self.velocityX = 0;
+ self.velocityY = 0;
+ self.lifetime = 120; // 2 seconds at 60fps
+ self.update = function () {
+ self.x += self.velocityX;
+ self.y += self.velocityY;
+ self.lifetime--;
+ if (self.lifetime <= 0 || self.x < -50 || self.x > 2098 || self.y < -50 || self.y > 2782) {
+ self.destroy();
+ }
+ };
+ return self;
+});
var PowerUp = Container.expand(function (type) {
var self = Container.call(this);
var powerUpGraphics = self.attachAsset(type, {
anchorX: 0.5,
@@ -141,8 +179,113 @@
meatGraphics.y = bounce;
};
return self;
});
+var Soldier = Container.expand(function () {
+ var self = Container.call(this);
+ var soldierGraphics = self.attachAsset('soldier', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 50;
+ self.maxHealth = 50;
+ self.shootTimer = 0;
+ self.shootCooldown = 60; // 1 second at 60fps
+ self.range = 300;
+ self.update = function () {
+ self.shootTimer--;
+ if (self.shootTimer <= 0) {
+ // Find closest zombie within range
+ var closestZombie = null;
+ var closestDistance = Infinity;
+ for (var z = 0; z < zombies.length; z++) {
+ var zombie = zombies[z];
+ var distance = Math.sqrt(Math.pow(zombie.x - self.x, 2) + Math.pow(zombie.y - self.y, 2));
+ if (distance < self.range && distance < closestDistance) {
+ closestDistance = distance;
+ closestZombie = zombie;
+ }
+ }
+ if (closestZombie) {
+ // Shoot at zombie
+ var bullet = new SoldierBullet();
+ bullet.x = self.x;
+ bullet.y = self.y;
+ var dx = closestZombie.x - self.x;
+ var dy = closestZombie.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 0) {
+ bullet.velocityX = dx / distance * 8;
+ bullet.velocityY = dy / distance * 8;
+ }
+ soldierBullets.push(bullet);
+ game.addChild(bullet);
+ LK.getSound('gunshot').play();
+ self.shootTimer = self.shootCooldown;
+ }
+ }
+ };
+ self.takeDamage = function (amount) {
+ self.health -= amount;
+ LK.effects.flashObject(self, 0xff0000, 300);
+ if (self.health <= 0) {
+ self.destroy();
+ }
+ };
+ return self;
+});
+var SoldierBullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bulletGraphics = self.attachAsset('bullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.velocityX = 0;
+ self.velocityY = 0;
+ self.lifetime = 180; // 3 seconds at 60fps
+ self.update = function () {
+ self.x += self.velocityX;
+ self.y += self.velocityY;
+ self.lifetime--;
+ if (self.lifetime <= 0 || self.x < -50 || self.x > 2098 || self.y < -50 || self.y > 2782) {
+ self.destroy();
+ }
+ };
+ return self;
+});
+var Tank = Container.expand(function () {
+ var self = Container.call(this);
+ var tankGraphics = self.attachAsset('tank', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2;
+ self.targetX = 1024;
+ self.targetY = 1366;
+ self.crushRadius = 80;
+ self.update = function () {
+ // Move towards center of map
+ var dx = self.targetX - self.x;
+ var dy = self.targetY - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 5) {
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ }
+ // Crush zombies
+ for (var z = zombies.length - 1; z >= 0; z--) {
+ var zombie = zombies[z];
+ var zombieDistance = Math.sqrt(Math.pow(zombie.x - self.x, 2) + Math.pow(zombie.y - self.y, 2));
+ if (zombieDistance < self.crushRadius) {
+ LK.setScore(LK.getScore() + 15);
+ dropRottenMeat(zombie.x, zombie.y);
+ zombie.destroy();
+ zombies.splice(z, 1);
+ }
+ }
+ };
+ return self;
+});
var Tree = Container.expand(function () {
var self = Container.call(this);
var treeGraphics = self.attachAsset('tree', {
anchorX: 0.5,
@@ -209,9 +352,17 @@
var houses = [];
var trees = [];
var raindrops = [];
var lightnings = [];
+var soldiers = [];
+var soldierBullets = [];
+var playerBullets = [];
+var pistols = [];
+var tank = null;
+var tankSpawnTimer = 3600; // 1 minute at 60fps
var dragNode = null;
+var playerHasPistol = false;
+var playerAmmo = 0;
var survivalTime = 0;
var meatCollected = 0;
var safeZoneRadius = 200;
var zombieSpawnRate = 120; // Start spawning every 2 seconds
@@ -253,10 +404,70 @@
});
meatTxt.anchor.set(0, 0);
meatTxt.y = 200; // Position below knife counter
LK.gui.topLeft.addChild(meatTxt);
+var ammoTxt = new Text2('', {
+ size: 60,
+ fill: 0x00FF00
+});
+ammoTxt.anchor.set(0, 0);
+ammoTxt.y = 260; // Position below meat counter
+LK.gui.topLeft.addChild(ammoTxt);
// Spawn initial house
spawnHouse();
+function spawnSoldiers() {
+ for (var h = 0; h < houses.length; h++) {
+ var house = houses[h];
+ // Spawn 2-3 soldiers behind each house
+ var soldierCount = 2 + Math.floor(Math.random() * 2);
+ for (var s = 0; s < soldierCount; s++) {
+ var soldier = new Soldier();
+ soldier.x = house.x + (Math.random() - 0.5) * 150;
+ soldier.y = house.y + 50 + Math.random() * 50;
+ soldiers.push(soldier);
+ game.addChild(soldier);
+ }
+ }
+}
+function spawnTank() {
+ if (tank) return; // Only one tank at a time
+ tank = new Tank();
+ // Spawn from random edge
+ var edge = Math.floor(Math.random() * 4);
+ switch (edge) {
+ case 0:
+ // Top
+ tank.x = Math.random() * 2048;
+ tank.y = -100;
+ break;
+ case 1:
+ // Right
+ tank.x = 2148;
+ tank.y = Math.random() * 2732;
+ break;
+ case 2:
+ // Bottom
+ tank.x = Math.random() * 2048;
+ tank.y = 2832;
+ break;
+ case 3:
+ // Left
+ tank.x = -100;
+ tank.y = Math.random() * 2732;
+ break;
+ }
+ game.addChild(tank);
+ LK.getSound('tankEngine').play();
+}
+function spawnPistol() {
+ var pistol = new Pistol();
+ pistol.x = Math.random() * (2048 - 100) + 50;
+ pistol.y = Math.random() * (2732 - 200) + 100;
+ pistols.push(pistol);
+ game.addChild(pistol);
+}
+// Spawn initial soldiers
+spawnSoldiers();
function spawnTree() {
var tree = new Tree();
var validPosition = false;
var attempts = 0;
@@ -284,9 +495,9 @@
trees.push(tree);
game.addChild(tree);
}
function createRain() {
- for (var r = 0; r < 5; r++) {
+ for (var r = 0; r < 2; r++) {
var raindrop = new Raindrop();
raindrop.x = Math.random() * 2048;
raindrop.y = -20;
raindrops.push(raindrop);
@@ -401,10 +612,33 @@
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
- dragNode = player;
- handleMove(x, y, obj);
+ // Check if player has pistol and ammo
+ if (playerHasPistol && playerAmmo > 0) {
+ // Shoot towards touch/click position
+ var bullet = new PlayerBullet();
+ bullet.x = player.x;
+ bullet.y = player.y;
+ var dx = x - player.x;
+ var dy = y - player.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 0) {
+ bullet.velocityX = dx / distance * 10;
+ bullet.velocityY = dy / distance * 10;
+ }
+ playerBullets.push(bullet);
+ game.addChild(bullet);
+ LK.getSound('gunshot').play();
+ playerAmmo--;
+ if (playerAmmo <= 0) {
+ playerHasPistol = false;
+ }
+ } else {
+ // Normal movement
+ dragNode = player;
+ handleMove(x, y, obj);
+ }
};
game.up = function (x, y, obj) {
dragNode = null;
};
@@ -562,10 +796,10 @@
rainTimer--;
if (rainTimer <= 0) {
isRaining = false;
} else {
- // Create raindrops
- if (survivalTime % 2 == 0) {
+ // Create raindrops (reduced frequency)
+ if (survivalTime % 8 == 0) {
createRain();
}
}
}
@@ -599,8 +833,114 @@
if (lightnings[l].lifetime <= 0) {
lightnings.splice(l, 1);
}
}
+ // Tank spawning logic
+ tankSpawnTimer--;
+ if (tankSpawnTimer <= 0) {
+ spawnTank();
+ tankSpawnTimer = 3600; // Reset to 1 minute
+ }
+ // Remove tank after some time and increase zombie spawn
+ if (tank) {
+ var tankDistance = Math.sqrt(Math.pow(tank.x - tank.targetX, 2) + Math.pow(tank.y - tank.targetY, 2));
+ if (tankDistance < 50) {
+ // Tank reached center, remove it and spawn more zombies
+ tank.destroy();
+ tank = null;
+ // Spawn extra zombies after tank leaves
+ for (var tz = 0; tz < 5; tz++) {
+ spawnZombie();
+ }
+ }
+ }
+ // Update soldiers
+ for (var s = soldiers.length - 1; s >= 0; s--) {
+ var soldier = soldiers[s];
+ if (soldier.health <= 0) {
+ soldiers.splice(s, 1);
+ continue;
+ }
+ // Soldier takes damage from nearby zombies
+ for (var z = 0; z < zombies.length; z++) {
+ var zombie = zombies[z];
+ var distance = Math.sqrt(Math.pow(zombie.x - soldier.x, 2) + Math.pow(zombie.y - soldier.y, 2));
+ if (distance < 30) {
+ soldier.takeDamage(5);
+ break;
+ }
+ }
+ }
+ // Update soldier bullets
+ for (var sb = soldierBullets.length - 1; sb >= 0; sb--) {
+ var bullet = soldierBullets[sb];
+ if (bullet.lifetime <= 0) {
+ soldierBullets.splice(sb, 1);
+ continue;
+ }
+ // Check collision with zombies
+ for (var z = zombies.length - 1; z >= 0; z--) {
+ var zombie = zombies[z];
+ if (bullet.intersects(zombie)) {
+ LK.setScore(LK.getScore() + 10);
+ dropRottenMeat(zombie.x, zombie.y);
+ zombie.destroy();
+ zombies.splice(z, 1);
+ bullet.destroy();
+ soldierBullets.splice(sb, 1);
+ break;
+ }
+ }
+ }
+ // Update player bullets
+ for (var pb = playerBullets.length - 1; pb >= 0; pb--) {
+ var bullet = playerBullets[pb];
+ if (bullet.lifetime <= 0) {
+ playerBullets.splice(pb, 1);
+ continue;
+ }
+ // Check collision with zombies
+ for (var z = zombies.length - 1; z >= 0; z--) {
+ var zombie = zombies[z];
+ if (bullet.intersects(zombie)) {
+ LK.setScore(LK.getScore() + 15);
+ dropRottenMeat(zombie.x, zombie.y);
+ zombie.destroy();
+ zombies.splice(z, 1);
+ bullet.destroy();
+ playerBullets.splice(pb, 1);
+ break;
+ }
+ }
+ }
+ // Check pistol collisions with player
+ for (var p = pistols.length - 1; p >= 0; p--) {
+ var pistol = pistols[p];
+ if (pistol.intersects(player)) {
+ playerHasPistol = true;
+ playerAmmo = pistol.ammo;
+ LK.getSound('powerup').play();
+ pistol.destroy();
+ pistols.splice(p, 1);
+ continue;
+ }
+ if (pistol.lifetime <= 0) {
+ pistols.splice(p, 1);
+ }
+ }
+ // Spawn pistols after tank visits
+ if (survivalTime > 3600 && Math.random() < 0.003) {
+ spawnPistol();
+ }
+ // Spawn new soldiers when houses are built
+ if (meatCollected % 10 === 0 && survivalTime % 60 === 0 && houses.length > soldiers.length / 2) {
+ spawnSoldiers();
+ }
// Update UI
meatTxt.setText('Meat: ' + meatCollected);
+ if (playerHasPistol && playerAmmo > 0) {
+ ammoTxt.setText('Ammo: ' + playerAmmo);
+ } else {
+ ammoTxt.setText('');
+ }
};
LK.playMusic('bgmusic');
\ No newline at end of file
korkmuş turuncu tişörtlü mavi pantolonlu genç bir insan. In-Game asset. 2d. High contrast. No shadows
Bir zombi çiz ama 2 boyutlu. In-Game asset. 2d. High contrast. No shadows
house. In-Game asset. 2d. High contrast. No shadows
tree cartoons. In-Game asset. 2d. High contrast. No shadows
elinde silah olan 2 boyutlu asker. In-Game asset. 2d. High contrast. No shadows
askeri tank png. In-Game asset. 2d. High contrast. No shadows
büyük kaslı ve Güçlü zombie 2 boyutlu png. In-Game asset. 2d. High contrast. No shadows
Kral Zombi 2 boyutlu. In-Game asset. 2d. High contrast. No shadows