User prompt
Make shadows render with lower z-index than the graphics object for hero and enemeis
User prompt
Add a shadow element inside hero and enemies class
User prompt
Use the sit tint method to change enemies health bars to red
User prompt
Make hero health bar be green
User prompt
Create a method on health bar to set tint
User prompt
Make enemy health bars red
User prompt
Decrease the y randomness of particle movement from 10 to 7
User prompt
Make starting scale of explosion particle graphics be between .5 and 1
User prompt
Scale the graphics asset rather than the entire element on particles
User prompt
Also shrink the particle asset when fading out
User prompt
Set particle element blendMode to 3
User prompt
After setting player x and y on startup also set the players current target to the spawn position
User prompt
Move the assignment of x an y on target indicator to after the player position is set
User prompt
Make target indicator the same as player position on startup
User prompt
Make the hero spawn position be at the bottom center of the level
User prompt
Make enemies spawn positions have the same bounds as the hero move method
User prompt
Use a calculation similar to 0xff0000 + (0xffffff - 0xff0000) * (10 - self.fadeOutRedTint) / 10; for red color
User prompt
Make sure the red tint calculation uses a full red color rather than green
User prompt
Do not calculate new tint, simply do a inline color calculation for each frame
User prompt
Do not use the current tint value to calculate the new tint value. Instead calculate it from scratch based on the tint offset
User prompt
Simply calculate newTint based on currenTint for each frame
User prompt
Update tint code such that enemy fades from full red to normal colors over 10 frames
User prompt
Fade out the red tint over 10 frames. Use a per frame color calculation.
User prompt
Calculate the red tint for each frame
User prompt
The enemy just flashes red for one frame when hit. Make the enemy red and then fade this out over 10 frames.
var ExplosionParticle = Container.expand(function () { var self = Container.call(this); var particleGraphics = XS.getAsset('particle', 'Explosion particle', .5, .5); particleGraphics.scale.set(Math.random() * .5 + .5); particleGraphics.y -= 150; particleGraphics.blendMode = 3; self.addChild(particleGraphics); self.move = function () { self.x += self.dx; self.y += self.dy; self.alpha -= 0.02; particleGraphics.scale.x *= 0.98; particleGraphics.scale.y *= 0.98; self.dx *= 0.98; self.dy *= 0.98; if (self.alpha <= 0) { self.destroy(); } }; }); var HealthBar = Container.expand(function () { var self = Container.call(this); var healthBarGraphics = XS.getAsset('healthBar', 'Health Bar', .5, 1); self.addChild(healthBarGraphics); self.setTint = function (tint) { healthBarGraphics.tint = tint; }; self.setTint(0x00FF00); self.updateHealth = function (health) { self.scale.x = health / 100; }; }); var TargetIndicator = Container.expand(function () { var self = Container.call(this); var targetGraphics = XS.getAsset('target', 'Target Indicator', .5, .5); targetGraphics.alpha = 0.5; targetGraphics.y -= 30; self.addChild(targetGraphics); }); var Player = Container.expand(function () { var self = Container.call(this); self.health = 100; self.findNearestEnemy = function (enemies) { var nearestEnemy = null; var nearestDistance = Infinity; for (var i = 0; i < enemies.length; i++) { var dx = enemies[i].x - self.x; var dy = enemies[i].y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < nearestDistance) { nearestDistance = distance; nearestEnemy = enemies[i]; } } return nearestEnemy; }; var playerShadow = XS.getAsset('playerShadow', 'Player shadow', .5, 1); playerShadow.alpha = 0.5; self.addChild(playerShadow); var playerGraphics = XS.getAsset('player', 'Player character', .5, 1); self.addChild(playerGraphics); var healthBar = new HealthBar(); healthBar.y = -playerGraphics.height; self.addChild(healthBar); self.healthBar = healthBar; self.targetX = 2048 / 2; self.targetY = 2732 / 2; self.speed = 5; self.lastShot = 0; self.move = function () { var dx = self.targetX - self.x; var dy = self.targetY - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > self.speed) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; self.healthBar.updateHealth(self.health); return true; } self.healthBar.updateHealth(self.health); return false; }; self.setTarget = function (x, y) { self.targetX = x; self.targetY = y; }; self.shoot = function (enemies) { var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; var nearestEnemy = self.findNearestEnemy(enemies); if (nearestEnemy) { var dx = nearestEnemy.x - self.x; var dy = nearestEnemy.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); bullet.dx = dx / distance; bullet.dy = dy / distance; } return bullet; }; }); var Enemy = Container.expand(function () { var self = Container.call(this); self.fadeRedTint = function () { if (self.fadeOutRedTint > 0) { enemyGraphics.tint = 0xff0000 + (0xffffff - 0xff0000) * (10 - self.fadeOutRedTint) / 10; if (--self.fadeOutRedTint <= 0) { enemyGraphics.tint = 0xFFFFFF; } } }; self.health = 100; var enemyShadow = XS.getAsset('enemyShadow', 'Enemy shadow', .5, 1); enemyShadow.alpha = 0.5; self.addChild(enemyShadow); var enemyGraphics = XS.getAsset('enemy', 'Enemy character', .5, 1); self.addChild(enemyGraphics); var healthBar = new HealthBar(); healthBar.setTint(0xFF0000); healthBar.y = -enemyGraphics.height; self.addChild(healthBar); self.healthBar = healthBar; self.healthBar.updateHealth(self.health); self.move = function () { self.fadeRedTint(); }; self.flashRed = function () { self.children[0].tint = 0xFF0000; self.fadeOutRedTint = 10; }; }); var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = XS.getAsset('bullet', 'Bullet', .5, .5); bulletGraphics.y -= 150; bulletGraphics.blendMode = 1; self.addChild(bulletGraphics); self.move = function () { self.dx *= 1.02; self.dy *= 1.02; self.x += self.dx * 4; self.y += self.dy * 4; if (self.x < 150 || self.x > 2048 - 150 || self.y < 700 || self.y > 2732 - 150) { return true; } return false; }; }); var Game = Container.expand(function () { var self = Container.call(this); self.createExplosion = function (x, y) { for (var j = 0; j < 10; j++) { var particle = new ExplosionParticle(); particle.x = x; particle.y = y; particle.dx = (Math.random() - 0.5) * 10; particle.dy = (Math.random() - 0.5) * 7; self.addChild(particle); particles.push(particle); } }; var particles = []; self.sortGameObjects = function () { self.children.sort(function (a, b) { if (a === background || b === background) return 0; if (a === targetIndicator) return -1; if (b === targetIndicator) return 1; return a.y - b.y; }); }; var background = XS.getAsset('background', 'Background', .5, .5); background.x = 2048 / 2; background.y = 2732 / 2; self.addChild(background); var targetIndicator = new TargetIndicator(); var player = self.addChild(new Player()); player.x = 2048 / 2; player.y = 2732 - player.height; player.setTarget(player.x, player.y); targetIndicator.x = player.x; targetIndicator.y = player.y; self.addChild(targetIndicator); var enemies = []; for (var i = 0; i < 5; i++) { var enemy = self.addChild(new Enemy()); enemy.x = Math.random() * (2048 - 300) + 150; enemy.y = Math.random() * (2732 - 850) + 700; enemies.push(enemy); } var bullets = []; XS.on('tick', function () { player.move(0, 0); var dx = player.targetX - player.x; var dy = player.targetY - player.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < player.speed && XS.ticks - player.lastShot >= 60) { player.lastShot = XS.ticks; var bullet = player.shoot(enemies); bullets.push(bullet); self.addChild(bullet); } if (distance < player.speed) { targetIndicator.visible = false; } for (var i = 0; i < enemies.length; i++) { enemies[i].move(); } for (var i = bullets.length - 1; i >= 0; i--) { if (bullets[i].move()) { self.createExplosion(bullets[i].x, bullets[i].y); bullets[i].destroy(); bullets.splice(i, 1); } else { bullets[i].move(); for (var j = 0; j < enemies.length; j++) { if (bullets[i].intersects(enemies[j])) { enemies[j].health -= 10; enemies[j].healthBar.updateHealth(enemies[j].health); enemies[j].flashRed(); if (enemies[j].health <= 0) { enemies[j].destroy(); enemies.splice(j, 1); } self.createExplosion(bullets[i].x, bullets[i].y); bullets[i].destroy(); bullets.splice(i, 1); break; } } } } for (var i = particles.length - 1; i >= 0; i--) { if (particles[i].alpha <= 0) { particles[i].destroy(); particles.splice(i, 1); } else { particles[i].move(); } } self.sortGameObjects(); }); stage.on('down', function (obj) { var pos = obj.event.getLocalPosition(self); pos.x = Math.max(Math.min(pos.x, 2048 - 150), 150); pos.y = Math.max(Math.min(pos.y, 2732 - 150), 700); player.setTarget(pos.x, pos.y); targetIndicator.x = pos.x; targetIndicator.y = pos.y; targetIndicator.visible = true; }); });
===================================================================
--- original.js
+++ change.js
@@ -53,13 +53,13 @@
}
}
return nearestEnemy;
};
- var playerGraphics = XS.getAsset('player', 'Player character', .5, 1);
- self.addChild(playerGraphics);
var playerShadow = XS.getAsset('playerShadow', 'Player shadow', .5, 1);
playerShadow.alpha = 0.5;
self.addChild(playerShadow);
+ var playerGraphics = XS.getAsset('player', 'Player character', .5, 1);
+ self.addChild(playerGraphics);
var healthBar = new HealthBar();
healthBar.y = -playerGraphics.height;
self.addChild(healthBar);
self.healthBar = healthBar;
@@ -109,13 +109,13 @@
}
}
};
self.health = 100;
- var enemyGraphics = XS.getAsset('enemy', 'Enemy character', .5, 1);
- self.addChild(enemyGraphics);
var enemyShadow = XS.getAsset('enemyShadow', 'Enemy shadow', .5, 1);
enemyShadow.alpha = 0.5;
self.addChild(enemyShadow);
+ var enemyGraphics = XS.getAsset('enemy', 'Enemy character', .5, 1);
+ self.addChild(enemyGraphics);
var healthBar = new HealthBar();
healthBar.setTint(0xFF0000);
healthBar.y = -enemyGraphics.height;
self.addChild(healthBar);
giant wall Pixel art, 16 bit, isometric, SNES, top-down, no background, white background, low resolution, symmetrical
Single Short round Isometric dungeon column, simple, few stones, single column, no floor, dark room, Single Game Texture. In-Game asset. 2d. Pixelart. White background. Blank background. Low detail. High contrast.
Multi color chaotic noise, primary colors Single Game Texture. In-Game asset. 2d. Pixelart. White background. Blank background. Low detail. High contrast.
Round purple magic fireball. White core Single Game Texture. In-Game asset. 2d. Pixelart. White background. Blank background. Low detail. High contrast.
enemy goblin , Pixel art, 16 bit, isometric, SNES, top-down, no background, white background, low resolution, symmetrical, seen from front. No staff.
Single fire particle Single Game Texture. In-Game asset. 2d. Pixelart. White background. Blank background. Low detail. High contrast.
https://i.imgur.com/R3ZLguO.jpg Dungeon, Empty open floor, dark, fullscreen, Single Game Texture. In-Game asset. 2d. Pixelart. White background. Blank background. high detail. High contrast. --ar 2:3
single wizard, hooded Pixel art, 16 bit, isometric, SNES, top-down, no background, white background, low resolution, symmetrical, seen from front.
round bomb. fuse on fire Single Game Texture. In-Game asset. 2d. Pixelart. White background. Blank background. Low detail. High contrast.
Multi color chaotic noise, primary colors. Rays from the center. Darker center Single Game Texture. In-Game asset. 2d. Pixelart. Low detail. High contrast.