Code edit (3 edits merged)
Please save this source code
User prompt
Please fix the bug: 'ReferenceError: adjustStateBase is not defined' in or related to this line: 'var newStateValues = adjustStateBase(state, stateValues);' Line Number: 944
Code edit (1 edits merged)
Please save this source code
User prompt
instead of adding the victory message to the center gui, add it to the top with a y-value of 200
Code edit (1 edits merged)
Please save this source code
User prompt
change the victory message y position from -300 to -600
Code edit (2 edits merged)
Please save this source code
User prompt
When the boss is defeated, display a bordered text "VICTORY" message in the center of the screen with a large size
User prompt
Add a new empty WeaponBoss class inheriting from Container, that calls gameover when instantiated
Code edit (2 edits merged)
Please save this source code
User prompt
spawn the boss using the spawner instead of creating it manually
User prompt
instead of spawning a boss at the start of the game, spawn it when the countdown reaches 0
Code edit (1 edits merged)
Please save this source code
User prompt
Rename the function to onDestroy
User prompt
in the enemyBoss class, define a self.onDeath function that flashes the screen black, and disables the enemySpawner
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'ReferenceError: dy is not defined' in or related to this line: 'self.parent.addChild(new ProjectileEnemy({' Line Number: 902
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
===================================================================
--- original.js
+++ change.js
@@ -623,9 +623,9 @@
}
}
for (var i = backgroundContainer.children.length - 1; i >= 0; i--) {
var child = backgroundContainer.children[i];
- if (child.tags[TAG_PICKUP] && child.tags[TAG_EXPERIENCE]) {
+ if (child.tags[TAG_PICKUP] && (child.tags[TAG_EXPERIENCE] || child.tags[TAG_HEALING])) {
child.activate();
}
}
self.callDestroy();
@@ -852,28 +852,29 @@
y: ENEMY_RANGED_GRAPHICS_OFFSET,
anchorX: 0.6,
anchorY: 0.5
});
+ var adjustStateBase = self.adjustState;
self.adjustState = function (state, stateValues) {
- var newStateValues = adjustStateBase(state, stateValues);
+ var newStateValues = adjustStateBase.call(self, state, stateValues);
switch (state) {
case ENEMY_STATE_MOVE:
newStateValues.cooldownAdjustment += ENEMY_RANGED_MOVE_COOLDOWN_ADJUSTMENT;
break;
case ENEMY_STATE_FLEE:
- stateValues.speedFactor *= ENEMY_RANGED_FLEE_SPEED_FACTOR;
+ newStateValues.speedFactor *= ENEMY_RANGED_FLEE_SPEED_FACTOR;
break;
}
return newStateValues;
};
self.onAttack = function () {
LK.effects.flashObject(self.graphics, 0x000000, 500);
var dx = hero.x - self.x;
- var dy = hero.y - self.y;
- self.parent.addChild(new ProjectileEnemy({
- x: self.graphics.x,
- y: self.graphics.y,
- rotation: Math.atan2(dy, dx),
+ var dy = (hero.y - self.y) / GAME_PERSPECTIVE;
+ midgroundContainer.addChild(new ProjectileEnemy({
+ x: self.x,
+ y: self.y + self.elevation,
+ direction: Math.atan2(dy, dx),
damage: ENEMY_RANGED_ATTACK_DAMAGE
}));
};
self.onUpdate = function () {
@@ -881,8 +882,10 @@
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;
};
+ self.setRadius(self.graphics.width / 2);
+ self.setElevation(ENEMY_RANGED_GRAPHICS_OFFSET);
return self;
});
var EnemyBoss = Enemy.expand(function (config) {
var self = Enemy.call(this, config);
@@ -904,8 +907,18 @@
y: ENEMY_BOSS_PROJECTILE_OFFSET,
rotation: angle
}));
}
+ var adjustStateBase = self.adjustState;
+ self.adjustState = function (state, stateValues) {
+ var newStateValues = adjustStateBase.call(self, state, stateValues);
+ switch (state) {
+ case ENEMY_STATE_ATTACK:
+ newStateValues.speedFactor = 1;
+ break;
+ }
+ return newStateValues;
+ };
self.onAttack = function () {
hero.takeDamage(ENEMY_BOSS_ATTACK_DAMAGE);
};
self.onDestroy = function () {
@@ -919,9 +932,9 @@
}
}
for (var i = backgroundContainer.children.length - 1; i >= 0; i--) {
var child = backgroundContainer.children[i];
- if (child.tags[TAG_PICKUP] && child.tags[TAG_EXPERIENCE]) {
+ if (child.tags[TAG_PICKUP] && (child.tags[TAG_EXPERIENCE] || child.tags[TAG_HEALING])) {
child.activate();
}
}
backgroundContainer.addChild(new PickupWeapon({
@@ -955,17 +968,16 @@
self.attackCooldown = ENEMY_BASIC_ATTACK_COOLDOWN;
self.xpDropChance = ENEMY_BASIC_XP_DROP_CHANCE;
self.xpDropExtraRolls = ENEMY_BASIC_XP_EXTRA_ROLLS;
self.graphics = self.attachAsset('enemyBasic', {
- y: ENEMY_BASIC_GRAPHICS_OFFSET,
anchorX: 0.5,
- anchorY: 0.5
+ anchorY: 1.0
});
self.update = function () {
updateBase();
self.setElevation(ENEMY_BASIC_GRAPHICS_OFFSET + ENEMY_BASIC_BOB_MAGNITUDE * Math.sin(self.animationAlpha / ENEMY_BASIC_BOB_PERIOD));
if (self.healthBar) {
- self.healthOffset = self.graphics.y + ENEMY_BASIC_HEALTH_OFFSET;
+ self.healthOffset = -self.graphics.y + ENEMY_BASIC_HEALTH_OFFSET;
self.healthBar.y = self.healthOffset;
}
};
self.onAttack = function () {
@@ -1220,13 +1232,13 @@
;
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_HEALTH_OFFSET = -30;
var ENEMY_BASIC_ATTACK_RANGE = 100;
var ENEMY_BASIC_ATTACK_DAMAGE = 10;
var ENEMY_BASIC_ATTACK_COOLDOWN = GAME_TICKS / 3;
-var ENEMY_BASIC_GRAPHICS_OFFSET = 175;
+var ENEMY_BASIC_GRAPHICS_OFFSET = 115;
var ENEMY_BASIC_BOB_MAGNITUDE = 15;
var ENEMY_BASIC_BOB_PERIOD = 15;
var ENEMY_BASIC_XP_DROP_CHANCE = 0.3; // Per level of Luck
var ENEMY_BASIC_XP_EXTRA_ROLLS = 2;
@@ -1239,9 +1251,9 @@
var ENEMY_RANGED_RANGE_VAR = 250;
var ENEMY_RANGED_ATTACK_DAMAGE = 5;
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_GRAPHICS_OFFSET = 200;
var ENEMY_RANGED_FLEE_DISTANCE_FACTOR = 0.35;
var ENEMY_RANGED_FLEE_SPEED_FACTOR = 2.0;
var ENEMY_RANGED_SCALE_PERIOD = 20;
var ENEMY_RANGED_SCALE_MAGNITUDE = 0.05;
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