User prompt
1. Yeni Oynanış Mekanikleri ✅ Görevler ve Hedefler: “3 pop-up kapat”, “1 dakikada 5 virüs temizle” gibi mikro görevler. Görev tamamlandıkça XP veya sanal "puan" kazanımı. ✅ Power-up’lar: “Sistem Taraması” (ekrandaki tüm virüsleri temizler) “Firewall” (bir süre yeni virüs oluşmaz) “Fake Antivirus” (yanıltıcı – virüsleri ikiye böler!) 🔁 2. Artan Zorluk ve Seviye Sistemi Her dakika yeni zorluk: daha hızlı virüsler, çift pencereli pop-up’lar, sahte güncelleme ekranları. Seviye bazlı ilerleme: Seviye 1 = 5 virüs, Seviye 2 = 10 virüs + daha sık BSOD vs. 😈 3. Farklı Virüs Türleri Yavaşlatıcı Virüs: Oyun ekranını bulanıklaştırır. Çoğalan Virüs: Tıklanınca ikiye ayrılır. Zamansal Virüs: Zaman dolmadan temizlenmezse BSOD açar. 🧰 4. Gelişmiş Hata Efektleri Sesli "sistem konuşmaları" (örneğin “Bu işlem gerçekleştirilemiyor!” gibi TTS efektiyle). Ters dönmüş ekran, pencerelerin kendi kendine kapanması veya kaçması gibi "glitch" efektleri. 🌐 5. Sahte İnternet Tarayıcısı/Pencere Sahte YouTube, sahte sosyal medya, sahte e-posta uyarıları gibi içerikler (örneğin “C++ öğrenen 12 yaşındaki çocuk 3 günde zengin oldu!” gibi clickbait içerikler). Bunların bazıları güvenli, bazıları virüs kaynağı olabilir. 🖼️ 6. Özelleştirme ve "Tema" Seçenekleri Farklı işletim sistemi temaları: XP, 98, Vista Klasik masaüstü duvar kağıtları seçilebilir (örneğin “Bliss”) 🧾 7. "Fake Log" ya da Sistem Günlükleri Oyun sırasında arka planda tutulan bir log: “User opened ÇÖKERT.EXE at 13:37” Bunlar puanlama, başarılar veya esprili mesajlar için kullanılabilir. 🏆 8. Başarımlar ve "Hackerman" Puanları Steam/itch.io gibi platformlarda gösterilecek başarımlar. Örnek: “10 virüsü arka arkaya temizle”, “20 pencereyi kapatmadan hayatta kal” İstersen bu eklemeleri yapmanı kolaylaştıracak modüler kod önerileri, yeni sınıf yapıları veya asset prompt’ları da sağlayabilirim. Örneğin: Yeni virüs sınıfı şablonu Power-up sistemine dair temel yapı BSOD sonrası rastgele "bilgisayar tekrar başlatılıyor..." animasyonu
User prompt
ses ve müzik ekle
Code edit (1 edits merged)
Please save this source code
User prompt
XP Virüs Kaosu
Initial prompt
Design a 2D retro-style virus simulator game inspired by Windows XP. The game interface should resemble an old XP desktop full of bugs, pop-ups, fake antivirus warnings, system errors, and chaotic malware behavior. Include elements like the Blue Screen of Death, distorted file names, looping error sounds, and visual glitches. All in-game UI and dialogues must be in Turkish. The tone should be humorous and nostalgic, mimicking early 2000s computer viruses. Pixel art graphics and exaggerated animations preferred
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Mavi ekran (BSOD) var BSOD = Container.expand(function () { var self = Container.call(this); var bg = self.attachAsset('bsod', { anchorX: 0, anchorY: 0 }); var bsodText = new Text2("Bir sorun algılandı ve Windows kapatıldı.\n\n" + "Kullanıcı: C:\\WINDOWS\\system32\\ÇÖKERT!.EXE\n\n" + "Teknik bilgi:\n*** STOP: 0x0000008E (0xC0000005, 0xBF803E03, 0xF5B5B9B8, 0x00000000)\n\n" + "Bilgisayarınız zarar görebilir. Lütfen yeniden başlatın.", { size: 48, fill: "#fff", font: "Tahoma" }); bsodText.anchor.set(0.5, 0.5); bsodText.x = 1024; bsodText.y = 1366; self.addChild(bsodText); return self; }); // Pop-up pencere var Popup = Container.expand(function () { var self = Container.call(this); // Gövde var body = self.attachAsset('popup_body', { anchorX: 0, anchorY: 0 }); // Başlık var title = self.attachAsset('popup_title', { anchorX: 0, anchorY: 0 }); title.y = 0; // Başlık metni var titles = ["VİRÜS UYARISI", "HATA", "BİLİNMEYEN PROGRAM", "GÜVENLİK TEHDİDİ", "UYARI"]; var titleText = new Text2(titles[Math.floor(Math.random() * titles.length)], { size: 38, fill: "#fff", font: "Tahoma" }); titleText.anchor.set(0.5, 0.5); titleText.x = 260; titleText.y = 30; self.addChild(titleText); // Kapat butonu var closeBtn = self.attachAsset('close_btn', { anchorX: 0, anchorY: 0 }); closeBtn.x = 460; closeBtn.y = 0; // X harfi var xText = new Text2("X", { size: 38, fill: "#fff", font: "Tahoma" }); xText.anchor.set(0.5, 0.5); xText.x = closeBtn.x + 30; xText.y = closeBtn.y + 30; self.addChild(xText); // Mesaj var messages = ["BİLGİSAYARINIZ TEHLİKEDE!\nHemen antivirüs yükleyin.", "SİSTEM HATASI: 0x0000007B\nLütfen tekrar deneyin.", "Bilinmeyen uygulama çalışıyor.\nDevam etmek istiyor musunuz?", "Virüs tespit edildi!\nDosya: C:\\WINDOWS\\system32\\ÇÖKERT!.EXE", "RAM yetersiz. Bellek boşaltılamıyor."]; var msg = new Text2(messages[Math.floor(Math.random() * messages.length)], { size: 32, fill: "#222", font: "Tahoma" }); msg.anchor.set(0.5, 0); msg.x = 260; msg.y = 80; self.addChild(msg); // Sürükleme desteği self.isDragging = false; self.down = function (x, y, obj) { // Kapat butonuna tıklandıysa if (x >= closeBtn.x && x <= closeBtn.x + 60 && y >= closeBtn.y && y <= closeBtn.y + 60) { if (self.onClose) self.onClose(); return; } // Başlıktan sürükleme if (y <= 60) { self.isDragging = true; self.dragOffsetX = x - self.x; self.dragOffsetY = y - self.y; } }; self.up = function (x, y, obj) { self.isDragging = false; }; return self; }); // Virüs simgesi var Virus = Container.expand(function () { var self = Container.call(this); var icon = self.attachAsset('virus_icon', { anchorX: 0.5, anchorY: 0.5 }); // Rastgele bozuk dosya adı var names = ["VIRUS32.EXE", "KORUMASIZ!.SCR", "BILINMEYEN.BAT", "TROJAN-TR.DLL", "ÇÖKERT!.EXE", "SİLİNDİ!.TMP"]; var label = new Text2(names[Math.floor(Math.random() * names.length)], { size: 38, fill: "#fff", font: "Tahoma" }); label.anchor.set(0.5, 0); label.y = 60; self.addChild(label); // Hareket yönü ve hız self.vx = (Math.random() - 0.5) * 8; self.vy = (Math.random() - 0.5) * 8; // Hafif titreme efekti için self.shake = function () { tween(self, { rotation: (Math.random() - 0.5) * 0.2 }, { duration: 80, easing: tween.cubicOut, onFinish: function onFinish() { tween(self, { rotation: 0 }, { duration: 80 }); } }); }; // Temizlenme animasyonu self.cleanAnim = function (cb) { tween(self, { alpha: 0, scaleX: 1.5, scaleY: 1.5 }, { duration: 300, onFinish: cb }); }; // Sürükleme desteği self.isDragging = false; self.down = function (x, y, obj) { self.isDragging = true; self.dragOffsetX = x - self.x; self.dragOffsetY = y - self.y; self.shake(); }; self.up = function (x, y, obj) { self.isDragging = false; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x003399 // XP mavi }); /**** * Game Code ****/ // XP müziği (loop) // Virüs temizleme sesi // Pop-up açılma sesi // Hata sesi // Mavi ekran (tam ekran kutu) // Kapat (X) butonu // Pop-up pencere (beyaz kutu, mavi başlık) // Virüs simgesi (kırmızı, retro kutu) // Masaüstü arka planı (XP tarzı) // Arka planı ekle var bg = LK.getAsset('xp_bg', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); game.addChild(bg); // Skor (temizlenen virüs sayısı) var score = 0; var xp = 0; var currentTask = null; var taskProgress = 0; var taskTxt = null; var xpTxt = null; var scoreTxt = new Text2("0", { size: 90, fill: "#fff", font: "Tahoma" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // XP göstergesi xpTxt = new Text2("XP: 0", { size: 48, fill: "#ff0", font: "Tahoma" }); xpTxt.anchor.set(0.5, 0); xpTxt.y = 80; LK.gui.top.addChild(xpTxt); // Görev göstergesi taskTxt = new Text2("", { size: 48, fill: "#0ff", font: "Tahoma" }); taskTxt.anchor.set(0.5, 0); taskTxt.y = 160; LK.gui.top.addChild(taskTxt); // Görevler var tasks = [{ type: "popup_close", count: 3, text: "3 pop-up kapat", reward: 50 }, { type: "virus_clean", count: 5, text: "5 virüs temizle", reward: 60 }, { type: "virus_clean_time", count: 5, time: 60, text: "1 dakikada 5 virüs temizle", reward: 100 }, { type: "popup_close_time", count: 4, time: 30, text: "30 sn'de 4 pop-up kapat", reward: 80 }]; var taskTimer = null; var taskTimeLeft = 0; // Görev başlatıcı function startTask() { // Rastgele görev seç currentTask = tasks[Math.floor(Math.random() * tasks.length)]; taskProgress = 0; if (currentTask.time) { taskTimeLeft = currentTask.time; if (taskTimer) LK.clearInterval(taskTimer); taskTimer = LK.setInterval(function () { taskTimeLeft--; updateTaskText(); if (taskTimeLeft <= 0) { // Görev başarısız taskTxt.setText("Görev başarısız! :("); currentTask = null; LK.setTimeout(startTask, 2000); LK.clearInterval(taskTimer); } }, 1000); } updateTaskText(); } function updateTaskText() { if (!currentTask) return; var txt = currentTask.text + " (" + taskProgress + "/" + currentTask.count + ")"; if (currentTask.time) txt += " [" + taskTimeLeft + " sn]"; taskTxt.setText(txt); } function completeTask() { xp += currentTask.reward; xpTxt.setText("XP: " + xp); taskTxt.setText("Görev tamamlandı! +" + currentTask.reward + " XP"); currentTask = null; if (taskTimer) LK.clearInterval(taskTimer); LK.setTimeout(startTask, 2000); } LK.setTimeout(startTask, 1000); // Virüs ve pop-up dizileri var viruses = []; var popups = []; var bsodActive = false; // Sürüklenen nesne var dragNode = null; // Virüs oluşturucu function spawnVirus() { var v = new Virus(); // Rastgele konum (ekranın ortasına çok yaklaşmasın) v.x = 200 + Math.random() * (2048 - 400); v.y = 300 + Math.random() * (2732 - 600); v.lastX = v.x; v.lastY = v.y; viruses.push(v); game.addChild(v); } // Pop-up oluşturucu function spawnPopup() { var p = new Popup(); p.x = 200 + Math.random() * (2048 - 700); p.y = 200 + Math.random() * (2732 - 500); p.lastX = p.x; p.lastY = p.y; p.onClose = function () { // Kapat animasyonu tween(p, { alpha: 0, scaleX: 0.8, scaleY: 0.8 }, { duration: 200, onFinish: function onFinish() { p.destroy(); for (var i = 0; i < popups.length; i++) { if (popups[i] === p) { popups.splice(i, 1); break; } } } }); LK.getSound('popup').play(); // Görev ilerlemesi if (typeof currentTask !== "undefined" && currentTask && (currentTask.type === "popup_close" || currentTask.type === "popup_close_time")) { taskProgress++; updateTaskText(); if (taskProgress >= currentTask.count) completeTask(); } }; popups.push(p); game.addChild(p); LK.getSound('popup').play(); } // Mavi ekranı göster function showBSOD() { if (bsodActive) return; bsodActive = true; var bsod = new BSOD(); game.addChild(bsod); // 2 saniye sonra oyun biter LK.setTimeout(function () { LK.showGameOver(); }, 2000); } // Oyun başında virüs ve pop-up'lar for (var i = 0; i < 4; i++) spawnVirus(); for (var i = 0; i < 2; i++) spawnPopup(); // Zamanlayıcılar: rastgele yeni virüs ve pop-up var virusTimer = LK.setInterval(function () { if (viruses.length < 10 && !bsodActive) { spawnVirus(); } }, 1800); var popupTimer = LK.setInterval(function () { if (popups.length < 5 && !bsodActive) { spawnPopup(); } }, 2500); // Rastgele mavi ekran (BSOD) şansı var bsodTimer = LK.setInterval(function () { if (!bsodActive && Math.random() < 0.07) { showBSOD(); } }, 4000); // Oyun müziği LK.playMusic('xp_theme', { loop: true }); // Oyun güncelleme döngüsü game.update = function () { // Virüs hareketleri ve sınırdan sekme for (var i = viruses.length - 1; i >= 0; i--) { var v = viruses[i]; if (!v.isDragging) { v.x += v.vx; v.y += v.vy; // Kenardan sekme if (v.x < 80 || v.x > 2048 - 80) v.vx *= -1; if (v.y < 120 || v.y > 2732 - 80) v.vy *= -1; // Hafif titreme if (Math.random() < 0.03) v.shake(); } // Temizleme: virüse tıklandıysa if (v.justClean) { v.cleanAnim(function () { v.destroy(); }); viruses.splice(i, 1); score++; scoreTxt.setText(score); LK.getSound('clean').play(); // Görev ilerlemesi if (typeof currentTask !== "undefined" && currentTask && (currentTask.type === "virus_clean" || currentTask.type === "virus_clean_time")) { taskProgress++; updateTaskText(); if (taskProgress >= currentTask.count) completeTask(); } // 15 virüs temizlenirse "You Win" if (score >= 15) { LK.showYouWin(); } } } // Pop-up'lar sınırdan taşmasın for (var j = 0; j < popups.length; j++) { var p = popups[j]; if (p.x < 0) p.x = 0; if (p.x > 2048 - 520) p.x = 2048 - 520; if (p.y < 0) p.y = 0; if (p.y > 2732 - 320) p.y = 2732 - 320; } }; // Sürükleme ve tıklama işlemleri function handleMove(x, y, obj) { if (dragNode) { dragNode.x = x - dragNode.dragOffsetX; dragNode.y = y - dragNode.dragOffsetY; } } game.move = handleMove; game.down = function (x, y, obj) { // Önce virüsleri kontrol et (üstteki öne) for (var i = viruses.length - 1; i >= 0; i--) { var v = viruses[i]; var dx = x - v.x; var dy = y - v.y; if (dx * dx + dy * dy < 80 * 80) { // Temizle v.justClean = true; return; } } // Pop-up'lar for (var j = popups.length - 1; j >= 0; j--) { var p = popups[j]; if (x >= p.x && x <= p.x + 520 && y >= p.y && y <= p.y + 320) { dragNode = p; p.down(x - p.x, y - p.y, obj); return; } } // Virüs sürükleme for (var k = viruses.length - 1; k >= 0; k--) { var v2 = viruses[k]; var dx2 = x - v2.x; var dy2 = y - v2.y; if (dx2 * dx2 + dy2 * dy2 < 80 * 80) { dragNode = v2; v2.down(x, y, obj); return; } } dragNode = null; }; game.up = function (x, y, obj) { if (dragNode) { if (dragNode.up) dragNode.up(x - (dragNode.x || 0), y - (dragNode.y || 0), obj); dragNode = null; } }; // Ekran bozulma efekti (kısa süreli titreme) function glitchScreen() { tween(game, { rotation: (Math.random() - 0.5) * 0.04, x: (Math.random() - 0.5) * 30, y: (Math.random() - 0.5) * 30 }, { duration: 120, onFinish: function onFinish() { tween(game, { rotation: 0, x: 0, y: 0 }, { duration: 120 }); } }); } // Hata sesi ve ekran bozulması, rastgele aralıklarla var errorTimer = LK.setInterval(function () { if (!bsodActive && Math.random() < 0.3) { LK.getSound('error').play(); glitchScreen(); } }, 1800);
===================================================================
--- original.js
+++ change.js
@@ -186,15 +186,101 @@
});
game.addChild(bg);
// Skor (temizlenen virüs sayısı)
var score = 0;
+var xp = 0;
+var currentTask = null;
+var taskProgress = 0;
+var taskTxt = null;
+var xpTxt = null;
var scoreTxt = new Text2("0", {
size: 90,
fill: "#fff",
font: "Tahoma"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
+// XP göstergesi
+xpTxt = new Text2("XP: 0", {
+ size: 48,
+ fill: "#ff0",
+ font: "Tahoma"
+});
+xpTxt.anchor.set(0.5, 0);
+xpTxt.y = 80;
+LK.gui.top.addChild(xpTxt);
+// Görev göstergesi
+taskTxt = new Text2("", {
+ size: 48,
+ fill: "#0ff",
+ font: "Tahoma"
+});
+taskTxt.anchor.set(0.5, 0);
+taskTxt.y = 160;
+LK.gui.top.addChild(taskTxt);
+// Görevler
+var tasks = [{
+ type: "popup_close",
+ count: 3,
+ text: "3 pop-up kapat",
+ reward: 50
+}, {
+ type: "virus_clean",
+ count: 5,
+ text: "5 virüs temizle",
+ reward: 60
+}, {
+ type: "virus_clean_time",
+ count: 5,
+ time: 60,
+ text: "1 dakikada 5 virüs temizle",
+ reward: 100
+}, {
+ type: "popup_close_time",
+ count: 4,
+ time: 30,
+ text: "30 sn'de 4 pop-up kapat",
+ reward: 80
+}];
+var taskTimer = null;
+var taskTimeLeft = 0;
+// Görev başlatıcı
+function startTask() {
+ // Rastgele görev seç
+ currentTask = tasks[Math.floor(Math.random() * tasks.length)];
+ taskProgress = 0;
+ if (currentTask.time) {
+ taskTimeLeft = currentTask.time;
+ if (taskTimer) LK.clearInterval(taskTimer);
+ taskTimer = LK.setInterval(function () {
+ taskTimeLeft--;
+ updateTaskText();
+ if (taskTimeLeft <= 0) {
+ // Görev başarısız
+ taskTxt.setText("Görev başarısız! :(");
+ currentTask = null;
+ LK.setTimeout(startTask, 2000);
+ LK.clearInterval(taskTimer);
+ }
+ }, 1000);
+ }
+ updateTaskText();
+}
+function updateTaskText() {
+ if (!currentTask) return;
+ var txt = currentTask.text + " (" + taskProgress + "/" + currentTask.count + ")";
+ if (currentTask.time) txt += " [" + taskTimeLeft + " sn]";
+ taskTxt.setText(txt);
+}
+function completeTask() {
+ xp += currentTask.reward;
+ xpTxt.setText("XP: " + xp);
+ taskTxt.setText("Görev tamamlandı! +" + currentTask.reward + " XP");
+ currentTask = null;
+ if (taskTimer) LK.clearInterval(taskTimer);
+ LK.setTimeout(startTask, 2000);
+}
+LK.setTimeout(startTask, 1000);
// Virüs ve pop-up dizileri
var viruses = [];
var popups = [];
var bsodActive = false;
@@ -236,8 +322,14 @@
}
}
});
LK.getSound('popup').play();
+ // Görev ilerlemesi
+ if (typeof currentTask !== "undefined" && currentTask && (currentTask.type === "popup_close" || currentTask.type === "popup_close_time")) {
+ taskProgress++;
+ updateTaskText();
+ if (taskProgress >= currentTask.count) completeTask();
+ }
};
popups.push(p);
game.addChild(p);
LK.getSound('popup').play();
@@ -299,8 +391,14 @@
viruses.splice(i, 1);
score++;
scoreTxt.setText(score);
LK.getSound('clean').play();
+ // Görev ilerlemesi
+ if (typeof currentTask !== "undefined" && currentTask && (currentTask.type === "virus_clean" || currentTask.type === "virus_clean_time")) {
+ taskProgress++;
+ updateTaskText();
+ if (taskProgress >= currentTask.count) completeTask();
+ }
// 15 virüs temizlenirse "You Win"
if (score >= 15) {
LK.showYouWin();
}