Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'ReferenceError: ENEMY_BOSS_HEALTH is not defined' in or related to this line: 'self.health = ENEMY_BOSS_HEALTH;' Line Number: 921
Code edit (3 edits merged)
Please save this source code
User prompt
add ENEMY_BOSS_PROJECTILE_COUNT projectileBoss instances to the boss, uniformly rotated
Code edit (1 edits merged)
Please save this source code
User prompt
add a projectileBoss asset to the ProjectileBoss class
User prompt
Add a new, empty ProjectileBoss class that inherits from the ConfigContainer class
Code edit (1 edits merged)
Please save this source code
User prompt
Add a new EnemyBoss class
Code edit (6 edits merged)
Please save this source code
User prompt
add an enabled variable and a setEnabled function to the enemy spawner class. Prevent spawning enemies if not enabled
User prompt
Please fix the bug: 'ReferenceError: graphics is not defined' in or related to this line: 'self.parent.addChild(new ProjectileEnemy({' Line Number: 888
Code edit (1 edits merged)
Please save this source code
Code edit (3 edits merged)
Please save this source code
User prompt
change the slightly brown tint to #FFEADB instead
User prompt
change the slightly brown tint to #FFD9BD instead
User prompt
change the slightly brown tint to #f5cfb3 instead
User prompt
change the slightly brown tint to C7AD99
Code edit (1 edits merged)
Please save this source code
User prompt
tint the uiBoonBackground and uiBoonUpgrade assets of the UiBoonSelection class slightly brown
Code edit (2 edits merged)
Please save this source code
User prompt
Rename the uiBoonButton asset to uiBoonSelection and update all usages in the code
Code edit (5 edits merged)
Please save this source code
User prompt
Please fix the bug: 'ReferenceError: ENEMY_RANGED_ATTACK_COOLDOWN is not defined' in or related to this line: 'self.attackCooldown = ENEMY_RANGED_ATTACK_COOLDOWN;' Line Number: 855
Code edit (2 edits merged)
Please save this source code
===================================================================
--- original.js
+++ change.js
@@ -3,11 +3,9 @@
****/
var ConfigContainer = Container.expand(function (config) {
var self = Container.call(this);
config = config || {};
- // Private variables
var destroyCalled = false;
- // Public variables
self.tags = {};
self.id = id++;
self.x = config.x || 0;
self.y = config.y || 0;
@@ -17,18 +15,16 @@
var scaleX = config.scaleX !== undefined ? config.scaleX : config.scale !== undefined ? config.scale : 1;
var scaleY = config.scaleY !== undefined ? config.scaleY : config.scale !== undefined ? config.scale : 1;
self.scale.set(scaleX, scaleY);
}
- // Public functions
self.callDestroy = function () {
if (!destroyCalled) {
destroyCalled = true;
self.onDestroy();
self.destroy();
}
};
self.onDestroy = function () {};
- // Enable inheritance
return self;
});
var Weapon = ConfigContainer.expand(function (config) {
var self = ConfigContainer.call(this, config);
@@ -91,8 +87,9 @@
}));
}
self.cooldown = WEAPON_CROSS_COOLDOWN_BASE / attackSpeed;
};
+ return self;
});
var UiCountdownTimer = ConfigContainer.expand(function (config) {
var self = ConfigContainer.call(this, config);
var countdown = config.countdown;
@@ -101,9 +98,9 @@
anchorX: .5,
anchorY: 0
}));
self.update = function () {
- if (countdown > 0 && --ticker <= 0) {
+ if (!isPaused && countdown > 0 && --ticker <= 0) {
ticker = 60;
if (--countdown === 0) {
countdownTxt.setFill('#AA0000');
// TODO: Spawn boss
@@ -119,9 +116,8 @@
var secondsString = (seconds < 10 ? '0' : '') + seconds;
countdownTxt.setText(minutesString + ':' + secondsString);
}
adjustLabel();
- // Enable inheritance
return self;
});
var UiBoonUpgradeButton = ConfigContainer.expand(function (config) {
var self = ConfigContainer.call(this, config);
@@ -134,9 +130,9 @@
anchorY: 0.5,
tint: 0xA0A0A0,
alpha: 0.5
});
- var button = self.attachAsset('uiBoonButton', {
+ var button = self.attachAsset('uiBoonSelection', {
width: config.size,
height: config.size,
anchorX: 0.5,
anchorY: 0.5,
@@ -198,9 +194,9 @@
anchorY: 0
}));
for (var i = 0; i < selectedBoons.length; i++) {
var boon = selectedBoons[i];
- var boonButton = self.attachAsset('uiBoonButton', {
+ var boonButton = self.attachAsset('uiBoonSelection', {
y: i * 120,
x: -120,
anchorX: 0.5,
anchorY: 0.4
@@ -224,8 +220,9 @@
anchorX: 0,
anchorY: .5
}));
}
+ return self;
});
var ProgressBar = ConfigContainer.expand(function (config) {
var self = ConfigContainer.call(this, config);
var width = config.width || 120;
@@ -276,9 +273,8 @@
anchorX: 0.5,
anchorY: 0.5,
tint: 0x000000
});
- // Enable inheritance
return self;
});
var Joystick = ConfigContainer.expand(function (config) {
var self = ConfigContainer.call(this, config);
@@ -346,9 +342,8 @@
self.direction = undefined;
knob.x = 0;
knob.y = 0;
};
- // Enable inheritance
return self;
});
var GameInstance = ConfigContainer.expand(function (config) {
var self = ConfigContainer.call(this, config);
@@ -420,8 +415,9 @@
self.callDestroy();
}
}
};
+ return self;
});
var ProjectileCross = GameInstance.expand(function (config) {
var self = GameInstance.call(this, config);
var linger = config.linger;
@@ -590,8 +586,9 @@
self.onDestroy = function () {
hero.addExperience(self.experience);
};
self.setRadius(self.graphics.width / 2);
+ return self;
});
var PickupCrucifix = Pickup.expand(function (config) {
var self = Pickup.call(this, config);
self.tags[TAG_CRUCIFIX] = true;
@@ -622,17 +619,14 @@
return self;
});
var Hero = GameInstance.expand(function (config) {
var self = GameInstance.call(this, config);
- // Private variables
var level = 1;
var experience = 0;
var levelRequirement = HERO_XP_REQUIRED;
- // Public variables
self.speed = HERO_SPEED_BASE;
self.healthMax = HERO_HEALTH_BASE;
self.health = self.healthMax;
- // Graphics
self.graphics = self.attachAsset('hero', {
anchorX: 0.5,
anchorY: 1.0
});
@@ -649,9 +643,8 @@
anchorX: 0.5,
anchorY: 0.5,
size: 65
}));
- // Public functions
self.update = function () {
if (!isPaused && joystick.direction !== undefined) {
self.moveInDirection(joystick.direction, joystick.magnitude * self.speed);
self.graphics.scale.x = Math.cos(joystick.direction) < 0 ? -1 : 1;
@@ -698,17 +691,14 @@
LK.effects.flashObject(self.graphics, HERO_COLOUR, 1000);
}
healthBar.setPercentage(self.health / self.healthMax);
};
- // Enable inheritance
return self;
});
var Enemy = GameInstance.expand(function (config) {
var self = GameInstance.call(this, config);
- // Private variables
var damageTaken = 0;
var cooldown = 0;
- // Public variables
self.tags[TAG_ENEMY] = true;
self.healthBar;
self.health = 0;
self.healthOffset = 0;
@@ -719,9 +709,8 @@
self.animationAlpha = 0;
self.xpDropBase = 0;
self.xpDropChance = 0;
self.xpDropExtraRolls = 0;
- // Public functions
self.update = function () {
if (!isPaused) {
self.animationAlpha++;
var state = ENEMY_STATE_MOVE;
@@ -816,9 +805,8 @@
});
var EnemyRanged = Enemy.expand(function (config) {
var self = Enemy.call(this, config);
var adjustStateBase = self.adjustState;
- // Public variables
self.speed = ENEMY_RANGED_SPEED;
self.fleeRange = self.attackRange * ENEMY_RANGED_FLEE_DISTANCE_FACTOR;
self.health = ENEMY_RANGED_HEALTH_BASE + ENEMY_RANGED_HEALTH_SCALE * difficultyScale;
self.healthOffset = ENEMY_RANGED_HEALTH_OFFSET;
@@ -831,9 +819,8 @@
y: ENEMY_RANGED_GRAPHICS_OFFSET,
anchorX: 0.6,
anchorY: 0.5
});
- // Public functions
self.adjustState = function (state, stateValues) {
var newStateValues = adjustStateBase(state, stateValues);
switch (state) {
case ENEMY_STATE_MOVE:
@@ -859,9 +846,8 @@
var newScale = 1 + Math.sin(self.animationAlpha / ENEMY_RANGED_SCALE_PERIOD) * ENEMY_RANGED_SCALE_MAGNITUDE;
self.graphics.scale.x = newScale;
self.graphics.scale.y = newScale;
};
- // Enable inheritance
return self;
});
var EnemyBasic = Enemy.expand(function (config) {
var self = Enemy.call(this, config);
@@ -909,26 +895,11 @@
self.setElevation(ENEMY_BASIC_GRAPHICS_OFFSET);
self.setRadius(45);
return self;
});
-/**
-* config {
-* x : Number || 0, // See: ConfigContainer
-* y : Number || 0, // See: ConfigContainer
-* rotation : Number || 0, // See: ConfigContainer
-* anchorX : Number || 0,
-* anchorY : Number || 1,
-* size : Number || TEXT_DEFAULT_SIZE,
-* weight : Number || TEXT_DEFAULT_WEIGHT,
-* font : String || TEXT_DEFAULT_FONT,
-* fill : String || TEXT_DEFAULT_FILL,
-* border : String || TEXT_DEFAULT_BORDER,
-* }
-**/
var BorderedText = ConfigContainer.expand(function (text, config) {
var self = ConfigContainer.call(this, config);
config = config || {};
- ;
var anchorX = config.anchorX !== undefined ? config.anchorX : 0;
var anchorY = config.anchorY !== undefined ? config.anchorY : 1;
var size = config.size !== undefined ? config.size : TEXT_DEFAULT_SIZE;
var weight = config.weight !== undefined ? config.weight : TEXT_DEFAULT_WEIGHT;
@@ -936,12 +907,10 @@
var textFill = config.fill !== undefined ? config.fill : TEXT_DEFAULT_FILL;
var borderFill = config.border !== undefined ? config.border : TEXT_DEFAULT_BORDER;
var textAssets = [];
var mainAsset;
- ;
self.setText = setText;
self.setFill = setFill;
- ;
function setText(newText) {
for (var i = 0; i < textAssets.length; i++) {
textAssets[i].setText(newText);
}
@@ -974,18 +943,17 @@
mainAsset = textAssets[TEXT_OFFSETS.length - 1];
}
;
buildTextAssets(text);
- // Enable inheritance
return self;
});
var EnemySpawner = Container.expand(function () {
var self = Container.call(this);
var borderedWidth = GAME_WIDTH - 2 * ENEMY_BORDER_SPAWN;
var borderedHeight = GAME_HEIGHT - 2 * ENEMY_BORDER_SPAWN;
var spawnTimer = ENEMY_SPAWN_DELAY;
self.update = function () {
- if (enemyCount < ENEMY_LIMIT && --spawnTimer <= 0) {
+ if (!isPaused && enemyCount < ENEMY_LIMIT && --spawnTimer <= 0) {
spawnTimer = Math.max(ENEMY_SPAWN_RATE_MIN, ENEMY_SPAWN_RATE_BASE - Math.floor(ENEMY_SPAWN_RATE_SCALE * difficultyScale));
var isRanged = difficultyScale >= ENEMY_RANGED_DIFFICULTY && Math.random() < Math.min(ENEMY_RANGED_SPAWN_CHANCE_MIN, ENEMY_RANGED_SPAWN_CHANCE_FACTOR * difficultyScale);
var enemyClass = isRanged ? EnemyRanged : EnemyBasic;
self.spawnClass(enemyClass);
@@ -1017,17 +985,17 @@
x: spawnX,
y: spawnY
}));
};
+ return self;
});
var SortingContainer = Container.expand(function () {
var self = Container.call(this);
self.update = function () {
self.children.sort(function (a, b) {
return a.y - b.y;
});
};
- // Enable inheritance
return self;
});
/****
@@ -1079,12 +1047,12 @@
var HERO_COLOUR = 0x0FA0FF;
var HERO_BORDER = 250;
var HERO_HEALTH_BASE = 100;
var HERO_HEALTH_BONUS = 30;
-var HERO_SPEED_BASE = 8;
-var HERO_SPEED_BONUS = 2;
-var HERO_XP_REQUIRED = 20;
-var HERO_XP_SCALING = 1.2;
+var HERO_SPEED_BASE = 10;
+var HERO_SPEED_BONUS = 3;
+var HERO_XP_REQUIRED = 15;
+var HERO_XP_SCALING = 1.15;
;
// Boon settings
var BOON_OPTIONS = 3;
var BOON_MAX_LEVEL = 3;
@@ -1109,9 +1077,9 @@
var WEAPON_CROSS_SPLIT_INCREMENT = 20 / 180 * Math.PI;
var WEAPON_CROSS_RANGE_BASE = 200;
var WEAPON_CROSS_RANGE_SCALING = 100;
var WEAPON_CROSS_RANGE_VARIATION = 0.1;
-var WEAPON_CROSS_RADIUS_BASE = 40;
+var WEAPON_CROSS_RADIUS_BASE = 50;
var WEAPON_CROSS_SCALE_SCALING = 0.35;
var WEAPON_CROSS_SCALE_DAMAGE_FACTOR = 0.1;
var WEAPON_CROSS_COOLDOWN_HIT = GAME_TICKS / 6;
var WEAPON_CROSS_COOLDOWN_BASE = 120;
@@ -1130,9 +1098,9 @@
;
// Enemy settings
var ENEMY_COLOUR = 0xAA0000;
var ENEMY_BORDER = 50; // Forced minimum move distance from the edge of the screen
-var ENEMY_BORDER_SPAWN = -100;
+var ENEMY_BORDER_SPAWN = -300;
var ENEMY_SPAWN_DELAY = 2 * GAME_TICKS;
var ENEMY_SPAWN_RATE_BASE = 1 * GAME_TICKS;
var ENEMY_SPAWN_RATE_SCALE = 0.75 * GAME_TICKS;
var ENEMY_SPAWN_RATE_MIN = 0.25 * GAME_TICKS;
@@ -1141,9 +1109,9 @@
var ENEMY_STATE_MOVE = 'Move';
var ENEMY_STATE_FLEE = 'Flee';
var ENEMY_STATE_ATTACK = 'Attack';
;
-var ENEMY_BASIC_SPEED = 2.5;
+var ENEMY_BASIC_SPEED = 2.0;
var ENEMY_BASIC_HEALTH_BASE = 10;
var ENEMY_BASIC_HEALTH_SCALE = 50;
var ENEMY_BASIC_HEALTH_OFFSET = 30;
var ENEMY_BASIC_ATTACK_RANGE = 100;
@@ -1154,9 +1122,9 @@
var ENEMY_BASIC_BOB_PERIOD = 10;
var ENEMY_BASIC_XP_DROP_CHANCE = 0.3; // Per level of Luck
var ENEMY_BASIC_XP_EXTRA_ROLLS = 2;
;
-var ENEMY_RANGED_SPEED = 1.5;
+var ENEMY_RANGED_SPEED = 1.0;
var ENEMY_RANGED_HEALTH_BASE = 20;
var ENEMY_RANGED_HEALTH_SCALE = 60;
var ENEMY_RANGED_HEALTH_OFFSET = 20;
var ENEMY_RANGED_RANGE_MIN = 500;
@@ -1165,9 +1133,9 @@
var ENEMY_RANGED_ATTACK_COOLDOWN = 4 * GAME_TICKS;
var ENEMY_RANGED_MOVE_COOLDOWN_ADJUSTMENT = -0.5;
var ENEMY_RANGED_GRAPHICS_OFFSET = 100;
var ENEMY_RANGED_FLEE_DISTANCE_FACTOR = 0.35;
-var ENEMY_RANGED_FLEE_SPEED_FACTOR = 1.5;
+var ENEMY_RANGED_FLEE_SPEED_FACTOR = 2.0;
var ENEMY_RANGED_SCALE_PERIOD = 20;
var ENEMY_RANGED_SCALE_MAGNITUDE = 0.05;
var ENEMY_RANGED_XP_DROP_BASE = 2;
var ENEMY_RANGED_XP_DROP_CHANCE = 0.5; // Per level of Luck
@@ -1233,9 +1201,9 @@
anchorX: 0.5,
anchorY: 1.0
});
var enemySpawner = game.addChild(new EnemySpawner());
-var backgroundContainer = game.addChild(new Container());
+var backgroundContainer = game.addChild(new SortingContainer());
var midgroundContainer = game.addChild(new SortingContainer());
var foregroundContainer = game.addChild(new Container());
var interfaceContainer = game.addChild(new Container());
var hero = midgroundContainer.addChild(new Hero({
pixel art cross with blue accents Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a white orb. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a white orb with a halo. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a pulsating white heart with a halo. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a dark goo projectile with red highlights. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art tall blue fireball. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of an evil fantasy sword facing downward. Minor red details. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
backgroundAmbient
Sound effect
heroHealed
Sound effect
pickupExperience
Sound effect
heroLeveled
Sound effect
weaponCrossImpact
Sound effect
heroImpact
Sound effect
enemyDeath
Sound effect
pickupWeapon
Sound effect
pickupCrucifix
Sound effect
weaponCrossLaunch
Sound effect
heroDeath
Sound effect
enemyRoar
Sound effect
clockChime
Sound effect