User prompt
Oyun İnce Ayarları - Kullanıcı Arayüzü (UI) Düzenlemesi: Ekranın üst kısmında yer alan tüm arayüz (UI) metin elemanları (Waves, Size, Orbs, Crystals, Level, Score, Health) düzgün ve okunaklı bir şekilde hizalanmalı ve çakışmamalıdır. 1. **Metin Aralığı:** Her bir metin etiketi ve değeri arasında yeterli boşluk bırakılmalı (örn. yatayda 20-30 piksel boşluk). 2. **Dikey Hizalama:** Tüm metinler aynı dikey hizada olmalı ve birbirlerinin üzerine binmemelidir. 3. **Okunabilirlik:** Metinler, arka plan ve diğer UI elemanları üzerinde her zaman net bir şekilde okunabilir olmalı. Gerekirse metinlerin altına hafif ve yarı saydam bir gölge veya arka plan şeridi eklenebilir. 4. **Font Boyutu:** Font boyutu, tüm bilgilerin ekrana sığmasına ve kolayca okunmasına izin verecek şekilde optimize edilmelidir.
User prompt
Oyun İnce Ayarları - Rakip Yapay Zeka (AI) Gelişimi: Arenadaki AI kontrollü düşman varlıkların (Kırmızı Tehlike Küreleri, Mor Fırlatma Üçgenleri vb.) gelişim ve büyüme hızı artırılmalı. 1. **Kaynak Toplama Hızı:** Düşman AI'lar, oyuncuya göre toplanabilir enerji parçacıklarını (Yıldız Tozu ve Enerji Küreleri) %25-30 daha hızlı toplamalıdır. 2. **Evrim Eşikleri:** Düşman AI'lar, daha düşük enerji eşiklerinde veya daha sık aralıklarla evrimleşmeli ve boyut/güç kazanmalıdır. Bu, onların oyuncuyla daha hızlı rekabete girmesini ve arenada daha çabuk güçlenmesini sağlamalıdır. 3. **Zorluk Eğrisi:** Her yeni dalga veya seviyede düşmanların başlangıç boyutları ve enerji seviyeleri daha yüksek olmalı, böylece oyunun zorluk eğrisi daha belirginleşmelidir. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Oyun İnce Ayarları - Karakter Hızı: Oyuncunun kontrol ettiği ana varlık (Kozmik Balina/Savaşçı) mevcut hızından %30 ila %40 oranında daha yavaş hareket etmeli. Kontrol hissi daha akıcı ve tepkisel olmalı, ancak genel hareket hızı azaltılmalı. Şu anki hızı çok yüksek, daha rahat kontrol edilebilir bir hız arayışındayız.
User prompt
bizim hızımız biraz daha yavaşlasın
User prompt
düşmanlar kaynaklara giderken daha hızlı olsun biz de mouse hareketimiz biraz daha yavaş olsun yani biraz hızımız yavaşlasın
User prompt
her şey güzel fakat bir sorun var rakipler oyuncuyu zorlamıyor rakipler daha agresif olsun ve daha çok kaynak toplasın ve bazen bize saldırsınlar
User prompt
biz kaynak topladıkça karakterimiz büyüsün aynı zamanda rakiplerde büyüsün kim daha çok kaynak topladıysa o kişi öbür adamı yiyebilsin ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'TypeError: setTimeout is not a function' in or related to this line: 'setTimeout(function () {' Line Number: 85
User prompt
oyun asla bitmesin düşmanlar ölünce yenisi doğsun ve daha iyi olsun
User prompt
oyun bitmesin düşmanlar öldüğünde daha iyi düşmanlar ortaya çıksın
User prompt
kaynaklar daha çok çıksın
User prompt
daha fazla level olsun daha fazla düşman olsun daha fazla kaynak olsun
Code edit (1 edits merged)
Please save this source code
User prompt
Upit: Evolution Arena
Initial prompt
Oyun Adı: Upit: Evrim Arenası Oyun Türü: Basit Strateji / Toplama (Arena Mücadele) Temel Konsept: Oyuncuların küçük bir yaratıkla başlayıp, bir arenada kaynak toplayarak ve evrimleşerek daha büyük ve güçlü rakiplere karşı mücadele ettiği, hızlı ve tekrar oynanabilir bir hayatta kalma oyunu. Oyun Mekanikleri: 1. **Yaratık Kontrolü:** Oyuncu, sevimli veya ilginç görünen, basit bir "temel" yaratığı kontrol eder. Kontroller basit ve sezgisel olmalı (yürüme, kaynak toplama). 2. **Kaynak Toplama:** Arena boyunca dağılmış çeşitli **renkli küreler, kristaller veya bitki özleri** gibi "kaynak" nesneleri bulunmalı. Oyuncu bu kaynaklara dokunarak veya üzerlerinden geçerek toplar. 3. **Evrim ve Yükseltme:** Toplanan kaynaklar, yaratığın **evrimleşmesi veya yeni yetenekler kazanması** için kullanılır. Her evrim, yaratığın görünümünü değiştirmeli ve istatistiklerini (örneğin, boyut, saldırı gücü, can) artırmalıdır. Örnek evrimler: * Daha büyük ve kaslı bir forma dönüşme. * Ateş püskürtme veya elektrik şoku gibi basit bir saldırı yeteneği kazanma. * Hız veya dayanıklılık artışı. 4. **AI Rakip Yaratıklar:** Arenada oyuncu gibi kaynak toplayan ve evrimleşen, ancak AI tarafından kontrol edilen farklı türde rakipler bulunmalı. Bu rakipler, farklı evrim yollarına ve zayıflıklara sahip olabilir. 5. **Basit Çatışma:** Oyuncu ve AI rakipleri belirli bir menzile girdiklerinde veya birbirlerine çarptıklarında otomatik olarak çatışmalı. Çatışma sonucu, yaratıkların istatistiklerine (saldırı gücü, can) göre basit bir hesaplamayla belirlenmeli (örn. "Yüksek saldırı gücü olan kazanır" veya "belirli element türü diğerine karşı avantajlıdır"). Yenilen yaratık arenadan çıkar. 6. **Hayatta Kalma:** Amaç, arenadaki son yaratık olarak kalmak veya belirli bir süre hayatta kalarak en yüksek evrim seviyesine ulaşmak. Oyun Ortamı ve Atmosfer: * **Tema:** Canlı, renkli ve fantastik bir arena ortamı. Belki yüzen adalar, büyülü bitki örtüsü veya antik kalıntılar içeren bir yer. * **Görsel Unsurlar:** Çeşitli kaynak nesneleri, farklı evrimleşmiş yaratık modelleri, arenanın genelinde yumuşak ve davetkar bir aydınlatma. * **Ses Tasarımı:** Eğlenceli ve dinamik fon müziği, kaynak toplama sesleri, evrimleşme efekti sesleri, basit çatışma sesleri. Hedef: Oyuncunun amacı, kaynakları stratejik olarak toplayarak yaratığını en güçlü hale getirmek ve arenadaki tüm AI rakiplerini yenerek hayatta kalan son yaratık olmaktır. En yüksek evrim seviyesi veya en uzun hayatta kalma süresi liderlik tablosu için kullanılabilir. Ek Özellikler (İsteğe Bağlı, Upit'in yeteneklerine göre): * Farklı başlangıç yaratığı sınıfları (her birinin farklı başlangıç istatistikleri veya potansiyel evrim yolları). * Arenada beliren "güçlendirme" veya "iyileştirme" nesneleri. * "Bölgeler arası" evrim veya kaynak yoğunluğu farklılıkları.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Creature = Container.expand(function (isPlayer) { var self = Container.call(this); self.isPlayer = isPlayer || false; self.health = 100; self.maxHealth = 100; self.attack = 10; self.speed = 2; self.size = 1; self.level = 1; self.resources = { orb: 0, crystal: 0, essence: 0 }; self.combatCooldown = 0; self.targetX = 0; self.targetY = 0; self.lastCombatTime = 0; var assetName = self.isPlayer ? 'player' : 'ai_creature'; var graphics = self.attachAsset(assetName, { anchorX: 0.5, anchorY: 0.5 }); self.evolve = function () { var requiredOrbs = self.level * 8; var requiredCrystals = self.level * 5; var requiredEssence = self.level * 3; if (self.resources.orb >= requiredOrbs && self.resources.crystal >= requiredCrystals && self.resources.essence >= requiredEssence && self.level < 20) { self.level++; self.size += 0.15; self.health += 25 + self.level * 5; self.maxHealth += 25 + self.level * 5; self.attack += 8 + self.level * 2; self.speed += 0.3; graphics.scaleX = self.size; graphics.scaleY = self.size; self.resources.orb -= requiredOrbs; self.resources.crystal -= requiredCrystals; self.resources.essence -= requiredEssence; LK.getSound('evolve').play(); LK.effects.flashObject(self, 0xffd700, 500); if (self.isPlayer) { LK.setScore(self.level * 150 + currentWave * 50); } } }; self.takeDamage = function (damage) { self.health -= damage; if (self.health <= 0) { self.health = 0; self.die(); } LK.effects.flashObject(self, 0xff0000, 200); }; self.die = function () { if (self.isPlayer) { LK.showGameOver(); } else { aiCreatures.splice(aiCreatures.indexOf(self), 1); self.destroy(); if (aiCreatures.length === 0) { LK.showYouWin(); } } }; self.findNearestResource = function () { var nearest = null; var minDistance = Infinity; for (var i = 0; i < resources.length; i++) { var resource = resources[i]; if (resource.collected) continue; var dx = resource.x - self.x; var dy = resource.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < minDistance) { minDistance = distance; nearest = resource; } } return nearest; }; self.update = function () { if (self.combatCooldown > 0) { self.combatCooldown--; } if (!self.isPlayer) { // Elite creatures target player more aggressively if (self.elite && Math.random() < 0.3) { self.targetX = player.x; self.targetY = player.y; } else { var target = self.findNearestResource(); if (target) { self.targetX = target.x; self.targetY = target.y; } } 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; } // Higher level creatures evolve more frequently var evolveChance = self.elite ? 0.02 : 0.005 + self.level * 0.002; if (Math.random() < evolveChance) { self.evolve(); } } self.x = Math.max(50, Math.min(1998, self.x)); self.y = Math.max(150, Math.min(2682, self.y)); }; return self; }); var Resource = Container.expand(function (type) { var self = Container.call(this); self.type = type || 'orb'; self.value = type === 'essence' ? 5 : type === 'crystal' ? 3 : 1; var assetName = 'resource_' + self.type; var graphics = self.attachAsset(assetName, { anchorX: 0.5, anchorY: 0.5 }); self.collected = false; self.collect = function () { if (self.collected) return; self.collected = true; LK.getSound('collect').play(); tween(self, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2c3e50 }); /**** * Game Code ****/ var background = game.attachAsset('arena_background', { x: 0, y: 0 }); var player = game.addChild(new Creature(true)); player.x = 1024; player.y = 1366; var aiCreatures = []; for (var i = 0; i < 12; i++) { var ai = game.addChild(new Creature(false)); ai.x = Math.random() * 1800 + 124; ai.y = Math.random() * 2400 + 166; ai.targetX = ai.x; ai.targetY = ai.y; aiCreatures.push(ai); } var resources = []; var maxResources = 60; var scoreText = new Text2('Level: 1 Score: 0', { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); var resourceText = new Text2('Orbs: 0 Crystals: 0 Essence: 0', { size: 40, fill: 0xFFFFFF }); resourceText.anchor.set(0, 0); resourceText.x = 20; resourceText.y = 20; LK.gui.topLeft.addChild(resourceText); var healthText = new Text2('Health: 100/100', { size: 40, fill: 0xFFFFFF }); healthText.anchor.set(1, 0); LK.gui.topRight.addChild(healthText); function spawnResource() { if (resources.length >= maxResources) return; var types = ['orb', 'crystal', 'essence']; var weights = [0.6, 0.3, 0.1]; var random = Math.random(); var type = 'orb'; if (random < weights[2]) type = 'essence';else if (random < weights[1] + weights[2]) type = 'crystal'; var resource = game.addChild(new Resource(type)); resource.x = Math.random() * 1800 + 124; resource.y = Math.random() * 2400 + 166; resources.push(resource); tween(resource, { alpha: 0.8 }, { duration: 500, easing: tween.easeOut }); } function checkCombat() { var allCreatures = [player].concat(aiCreatures); for (var i = 0; i < allCreatures.length; i++) { for (var j = i + 1; j < allCreatures.length; j++) { var creature1 = allCreatures[i]; var creature2 = allCreatures[j]; if (creature1.combatCooldown > 0 || creature2.combatCooldown > 0) continue; if (creature1.health <= 0 || creature2.health <= 0) continue; var dx = creature1.x - creature2.x; var dy = creature1.y - creature2.y; var distance = Math.sqrt(dx * dx + dy * dy); var combatRange = (creature1.size + creature2.size) * 60; if (distance < combatRange) { var damage1 = creature1.attack + Math.random() * 10; var damage2 = creature2.attack + Math.random() * 10; creature1.takeDamage(damage2); creature2.takeDamage(damage1); creature1.combatCooldown = 60; creature2.combatCooldown = 60; LK.getSound('combat').play(); } } } } var dragActive = false; game.down = function (x, y, obj) { dragActive = true; player.x = x; player.y = y; }; game.move = function (x, y, obj) { if (dragActive) { player.x = x; player.y = y; } }; game.up = function (x, y, obj) { dragActive = false; }; game.update = function () { for (var i = resources.length - 1; i >= 0; i--) { var resource = resources[i]; if (resource.collected) { resources.splice(i, 1); continue; } var allCreatures = [player].concat(aiCreatures); for (var j = 0; j < allCreatures.length; j++) { var creature = allCreatures[j]; if (creature.health <= 0) continue; var dx = creature.x - resource.x; var dy = creature.y - resource.y; var distance = Math.sqrt(dx * dx + dy * dy); var collectRange = creature.size * 40; if (distance < collectRange) { creature.resources[resource.type] += resource.value; resource.collect(); break; } } } checkCombat(); if (LK.ticks % 120 === 0) { spawnResource(); } if (LK.ticks % 300 === 0) { player.evolve(); } // Wave progression system if (aiCreatures.length === 0 && currentWave <= maxWaves) { currentWave++; if (currentWave <= maxWaves) { waveStartTime = LK.ticks + 180; // 3 second delay LK.effects.flashScreen(0xffff00, 1000); } else { LK.showYouWin(); } } // Spawn next wave if (waveStartTime > 0 && LK.ticks >= waveStartTime) { spawnWave(); waveStartTime = 0; } // Enhanced resource spawning based on wave if (LK.ticks % (200 - currentWave * 10) === 0) { spawnResource(); } resourceText.setText('Wave: ' + currentWave + ' Orbs: ' + player.resources.orb + ' Crystals: ' + player.resources.crystal + ' Essence: ' + player.resources.essence); healthText.setText('Health: ' + Math.ceil(player.health) + '/' + player.maxHealth); }; var currentWave = 1; var maxWaves = 10; var enemiesPerWave = 8; var waveStartTime = 0; function spawnWave() { var enemiesToSpawn = enemiesPerWave + (currentWave - 1) * 2; for (var i = 0; i < enemiesToSpawn; i++) { var ai = game.addChild(new Creature(false)); ai.x = Math.random() * 1800 + 124; ai.y = Math.random() * 2400 + 166; ai.targetX = ai.x; ai.targetY = ai.y; ai.level = Math.max(1, currentWave - 2); ai.health += ai.level * 15; ai.maxHealth += ai.level * 15; ai.attack += ai.level * 3; aiCreatures.push(ai); } LK.effects.flashScreen(0x00ff00, 500); } for (var i = 0; i < 25; i++) { spawnResource(); } LK.playMusic('arena_music'); ;
===================================================================
--- original.js
+++ change.js
@@ -29,26 +29,27 @@
anchorX: 0.5,
anchorY: 0.5
});
self.evolve = function () {
- var totalResources = self.resources.orb + self.resources.crystal + self.resources.essence;
- if (totalResources >= self.level * 10) {
+ var requiredOrbs = self.level * 8;
+ var requiredCrystals = self.level * 5;
+ var requiredEssence = self.level * 3;
+ if (self.resources.orb >= requiredOrbs && self.resources.crystal >= requiredCrystals && self.resources.essence >= requiredEssence && self.level < 20) {
self.level++;
- self.size += 0.2;
- self.health += 20;
- self.maxHealth += 20;
- self.attack += 5;
- self.speed += 0.5;
+ self.size += 0.15;
+ self.health += 25 + self.level * 5;
+ self.maxHealth += 25 + self.level * 5;
+ self.attack += 8 + self.level * 2;
+ self.speed += 0.3;
graphics.scaleX = self.size;
graphics.scaleY = self.size;
- self.resources.orb = Math.max(0, self.resources.orb - 5);
- self.resources.crystal = Math.max(0, self.resources.crystal - 3);
- self.resources.essence = Math.max(0, self.resources.essence - 2);
+ self.resources.orb -= requiredOrbs;
+ self.resources.crystal -= requiredCrystals;
+ self.resources.essence -= requiredEssence;
LK.getSound('evolve').play();
LK.effects.flashObject(self, 0xffd700, 500);
if (self.isPlayer) {
- LK.setScore(self.level * 100);
- scoreText.setText('Level: ' + self.level + ' Score: ' + LK.getScore());
+ LK.setScore(self.level * 150 + currentWave * 50);
}
}
};
self.takeDamage = function (damage) {
@@ -90,21 +91,29 @@
if (self.combatCooldown > 0) {
self.combatCooldown--;
}
if (!self.isPlayer) {
- var target = self.findNearestResource();
- if (target) {
- self.targetX = target.x;
- self.targetY = target.y;
+ // Elite creatures target player more aggressively
+ if (self.elite && Math.random() < 0.3) {
+ self.targetX = player.x;
+ self.targetY = player.y;
+ } else {
+ var target = self.findNearestResource();
+ if (target) {
+ self.targetX = target.x;
+ self.targetY = target.y;
+ }
}
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;
}
- if (Math.random() < 0.01) {
+ // Higher level creatures evolve more frequently
+ var evolveChance = self.elite ? 0.02 : 0.005 + self.level * 0.002;
+ if (Math.random() < evolveChance) {
self.evolve();
}
}
self.x = Math.max(50, Math.min(1998, self.x));
@@ -158,18 +167,18 @@
var player = game.addChild(new Creature(true));
player.x = 1024;
player.y = 1366;
var aiCreatures = [];
-for (var i = 0; i < 5; i++) {
+for (var i = 0; i < 12; i++) {
var ai = game.addChild(new Creature(false));
ai.x = Math.random() * 1800 + 124;
ai.y = Math.random() * 2400 + 166;
ai.targetX = ai.x;
ai.targetY = ai.y;
aiCreatures.push(ai);
}
var resources = [];
-var maxResources = 30;
+var maxResources = 60;
var scoreText = new Text2('Level: 1 Score: 0', {
size: 60,
fill: 0xFFFFFF
});
@@ -268,17 +277,57 @@
}
}
}
checkCombat();
- if (LK.ticks % 180 === 0) {
+ if (LK.ticks % 120 === 0) {
spawnResource();
}
if (LK.ticks % 300 === 0) {
player.evolve();
}
- resourceText.setText('Orbs: ' + player.resources.orb + ' Crystals: ' + player.resources.crystal + ' Essence: ' + player.resources.essence);
+ // Wave progression system
+ if (aiCreatures.length === 0 && currentWave <= maxWaves) {
+ currentWave++;
+ if (currentWave <= maxWaves) {
+ waveStartTime = LK.ticks + 180; // 3 second delay
+ LK.effects.flashScreen(0xffff00, 1000);
+ } else {
+ LK.showYouWin();
+ }
+ }
+ // Spawn next wave
+ if (waveStartTime > 0 && LK.ticks >= waveStartTime) {
+ spawnWave();
+ waveStartTime = 0;
+ }
+ // Enhanced resource spawning based on wave
+ if (LK.ticks % (200 - currentWave * 10) === 0) {
+ spawnResource();
+ }
+ resourceText.setText('Wave: ' + currentWave + ' Orbs: ' + player.resources.orb + ' Crystals: ' + player.resources.crystal + ' Essence: ' + player.resources.essence);
healthText.setText('Health: ' + Math.ceil(player.health) + '/' + player.maxHealth);
};
-for (var i = 0; i < 15; i++) {
+var currentWave = 1;
+var maxWaves = 10;
+var enemiesPerWave = 8;
+var waveStartTime = 0;
+function spawnWave() {
+ var enemiesToSpawn = enemiesPerWave + (currentWave - 1) * 2;
+ for (var i = 0; i < enemiesToSpawn; i++) {
+ var ai = game.addChild(new Creature(false));
+ ai.x = Math.random() * 1800 + 124;
+ ai.y = Math.random() * 2400 + 166;
+ ai.targetX = ai.x;
+ ai.targetY = ai.y;
+ ai.level = Math.max(1, currentWave - 2);
+ ai.health += ai.level * 15;
+ ai.maxHealth += ai.level * 15;
+ ai.attack += ai.level * 3;
+ aiCreatures.push(ai);
+ }
+ LK.effects.flashScreen(0x00ff00, 500);
+}
+for (var i = 0; i < 25; i++) {
spawnResource();
}
-LK.playMusic('arena_music');
\ No newline at end of file
+LK.playMusic('arena_music');
+;
\ No newline at end of file
"Oyuncunun karakteri, parlak mavi renkte, orta boyutlu, pürüzsüz bir daire şeklinde olmalı. Hareket ettiğinde hafif bir iz bırakmalı veya parlak bir kenar çizgisi olmalı. Canı azaldığında rengi kırmızıya dönmeli veya titremeli." tek bir top olsun. In-Game asset. 2d. High contrast. No shadows
"Küçük boyutlu, parlak turuncu renkte, yuvarlak bir 'Orb' (enerji küresi) asseti oluştur. Bu orb, oyuncu tarafından toplandığında skor artışına neden olmalı ve hafif bir toplama efekti (parlama, yok olma animasyonu) göstermeli.. In-Game asset. 2d. High contrast. No shadows
Orta boyutlu, koyu mor renkte, pürüzsüz kenarlı bir 'Kristal' (kare) asseti oluştur. Kristal toplandığında oyuncunun belirli bir özelliğini (örneğin, hızı, canı) geçici olarak artırmalı veya özel bir yetenek kazandırmalı. Toplandığında patlama veya parlama efekti olmalı.". In-Game asset. 2d. High contrast. No shadows
aynısı olsun sadece bunu yeşil yap
Arka Plan: Koyu lacivert veya antrasit gri düz zeminin üzerine, 1. **Yavaşça Hareket Eden Yıldızlar/Parçacıklar:** Arka planda rastgele dağılmış, küçük, beyaz veya hafifçe parlayan noktalar (yıldızlar veya uzay tozları) oluştur. Bu noktalar, çok yavaş bir hızda, ekranın üstünden altına doğru akmalı. Yoğunlukları orta seviyede olmalı, oyuncunun ve diğer objelerin görünürlüğünü engellememeli. 2. **Hafif Renk Geçişleri (Nebula Efekti):** Arka planın genel rengi sabit kalmakla birlikte, çok hafif tonlarda (örn. mor ve yeşilin koyu tonları) yavaş ve bulanık renk geçişleri (nebulamsı bir etki) bulunmalı. Bu geçişler statik olmamalı, sürekli ama çok yavaş bir şekilde değişmeli.. In-Game asset. 2d. High contrast. No shadows
Düşman Varlığı: Gri Çekici Halka - Görsel: Orta boyutlu, koyu gri veya metalik gri renkte, kalın bir halka (dairesel bir çerçeve) şeklinde. İç kısmı boş olmalı. - Davranış: Arenada yavaşça hareket etmeli. Belirli bir menzile giren toplanabilir nesneleri (Orblar ve Kristaller) kendine doğru yavaşça çekmeli ve emmeli. Topladığı nesnelerle boyutu hafifçe artabilir veya rengi koyulaşabilir. Oyuncuya aktif olarak saldırmaz. - Etki (Oyuncuya Temas Edince): Oyuncunun canını az miktarda (örn. 5 puan) azaltmalı ve oyuncuyu da kendine doğru hafifçe çekmeli (bir "çekim alanı" yaratmalı). - Ses Efekti: Nesneleri çekerken hafif bir "emme" veya "vızıldama" sesi, temas halinde zayıf bir "enerji boşalması" sesi.. In-Game asset. 2d. High contrast. No shadows
Oyun Adı: Kozmik Balina: Evrimsel Yolculuk Oyun Türü: Uzayda Hayatta Kalma / Toplama / Büyüme (Casual) Temel Konsept: Oyuncu, devasa bir kozmik varlığı (enerji küresi, gezegen ruhu veya kozmik balina yavrusu gibi) kontrol eder. Amacı, uzaya dağılmış enerji parçacıklarını ve kürelerini emerek büyümek, evrimleşmek ve arenada sürekli beliren tehlikeli kozmik anomalilerden (kara delik benzeri alanlar, düşman varlıklar) kaçarak mümkün olduğunca uzun süre hayatta kalmaktır. Odak noktası görsel büyüme ve atmosferik keşiftir. Görsel Stil ve Atmosfer: * **Genel Estetik:** Minimalist ama zengin ve büyüleyici bir kozmik sanat stili. Derin uzayın gizemini ve güzelliğini yansıtmalı. * **Renk Paleti:** Koyu lacivert, mor, derin siyahlar arka plan için. Oyuncu, toplanabilirler ve düşmanlar için parlak neon mavisi, mor, turuncu, kırmızı, sarı gibi kontrast renkler. * **Parçacık Efektleri:** Bol miktarda parlak parçacık efekti (yıldız tozu, enerji emilimi, çarpışma parlamaları, evrimsel auralar). O. In-Game asset. 2d. High contrast. No shadows