Code edit (9 edits merged)
Please save this source code
User prompt
visually set the scoreIcon to be on the right of the scoreText
Code edit (5 edits merged)
Please save this source code
User prompt
in the game on tick, iterate through the pickupProjectileList and calling it's update statement
Code edit (4 edits merged)
Please save this source code
User prompt
create a pickupProjectile class that has an update function to move towards the player at a speed of 20
Code edit (1 edits merged)
Please save this source code
User prompt
when the pickup decor flips, randomly scale the decor's x to be between PICKUP_FLIP_SCALE and 1
Code edit (1 edits merged)
Please save this source code
User prompt
remove any console.logs
Code edit (11 edits merged)
Please save this source code
User prompt
ramps have a directional arrow indicator on top of them
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'ReferenceError: PICKUP_TIL_SQRDIST is not defined' in this line: 'if (!tilted && distSqr <= PICKUP_TIL_SQRDIST) {' Line Number: 157
User prompt
Fix Bug: 'ReferenceError: PICKUP_TIL_SQRDIST is not defined' in this line: 'if (!tilted && distSqr <= PICKUP_TIL_SQRDIST) {' Line Number: 157
Code edit (2 edits merged)
Please save this source code
User prompt
Fix Bug: 'ReferenceError: collectDist is not defined' in this line: 'var tiltDistSqr = collectDist * collectDist;' Line Number: 129
User prompt
when setting tilted = true in the pickup, adjust the pickupBase's graphic rotation to be between 5 and 20 degrees
Code edit (1 edits merged)
Please save this source code
User prompt
When a pickup is activated, destroy the graphic and decor and create a pickupBase graphic in their place
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: self.activate is not a function' in this line: 'self.activate();' Line Number: 157
User prompt
create a pickupProjectileList variable in the games class
Code edit (10 edits merged)
Please save this source code
User prompt
add an activate function to the pickups class which sets the self.active to true. This should be called where `self.active = true;` is called in the pickups class
===================================================================
--- original.js
+++ change.js
@@ -1,4 +1,29 @@
+var DropEffect = Container.expand(function (x, y, player) {
+ var self = Container.call(this);
+ var angle = player.angle + Math.random() * DROP_ANGLE_VARIANCE;
+ var speed = 10 + Math.random() * 5;
+ var speedX = Math.cos(angle) * speed;
+ var speedY = Math.sin(angle) * speed;
+ var spinSpeed = Math.random() * 0.2 - 0.1;
+ var scale = 1;
+ var scaleDecrement = 1 / 60;
+ var graphics = self.createAsset('pickupProjectile', 'Drop graphics', 0.5, 0.95);
+ graphics.rotation = Math.random() * Math.PI * 2;
+ ;
+ self.x = x;
+ self.y = y;
+ self.update = update;
+ ;
+ function update(velocityX, velocityY) {
+ self.x += speedX - velocityX;
+ self.y += speedY - velocityY;
+ scale -= scaleDecrement;
+ graphics.rotation += spinSpeed;
+ graphics.scale.set(scale);
+ return scale <= 0;
+ }
+});
var BloodsplatterEffect = Container.expand(function (x, y) {
var self = Container.call(this);
var duration = 15;
var remaining = duration;
@@ -157,18 +182,21 @@
var graphics = self.createAsset('pickupProjectile', 'Pickup Projectile graphics', 0.5, 0.5);
;
self.x = x;
self.y = y;
- self.update = function () {
+ self.update = update;
+ ;
+ function update() {
+ var targetY = target.y + PLAYER_COLLECTION_HEIGHT - target.rampHeight;
var dx = target.x - self.x;
- var dy = target.y - self.y;
+ var dy = targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
var velocityX = dx / distance * PICKUP_SPEED;
var velocityY = dy / distance * PICKUP_SPEED;
self.x += velocityX;
self.y += velocityY;
return distance <= PICKUP_COLLIDE_DIST;
- };
+ }
});
var LandscapeTile = Container.expand(function (x, y, {lookup, xIndex, yIndex, density, pickups, monsters, player, key, landscapeTiles, layers, rampList}) {
var self = Container.call(this);
var obstructions = [];
@@ -367,16 +395,14 @@
}
});
var Player = Container.expand(function (x, y) {
var self = Container.call(this);
- var angle = 0;
var speed = 0;
var reduction = 0;
var travelDistX = 0;
var travelDistY = 0;
var rampRemaining = 0;
var rampDuration = 0;
- var rampHeight = 0;
var rampHeightMax = 0;
var playerShadow = self.createAsset('shadow', 'Player shadow', 0.5, 0.5);
var platformGraphics = self.createAsset('platform', 'Platform image', 0.4, 0.5);
var playerGraphics = self.createAsset('player', 'Player character', 0.45, 1);
@@ -389,9 +415,11 @@
hitbox.alpha = 0;
;
self.x = x;
self.y = y;
+ self.angle = 0;
self.airborne = false;
+ self.rampHeight = 0;
self.invulnerable = false;
self.invulnerableTime = 3 * 60;
self.invulnerableTimer = 0;
self.distanceTravelled = 0;
@@ -409,30 +437,30 @@
if (self.airborne) {
if (--rampRemaining <= 0) {
self.airborne = false;
}
- rampHeight = rampHeightMax * Math.sin(Math.PI * rampRemaining / rampDuration);
- platformGraphics.y = -rampHeight;
- playerGraphics.y = -rampHeight;
+ self.rampHeight = rampHeightMax * Math.sin(Math.PI * rampRemaining / rampDuration);
+ platformGraphics.y = -self.rampHeight;
+ playerGraphics.y = -self.rampHeight;
}
if (!self.airborne) {
var dx = targetPosition.x - self.x;
var dy = targetPosition.y - self.y;
- angle = angleClamp(Math.atan2(dy, dx));
+ self.angle = angleClamp(Math.atan2(dy, dx));
}
- var acceleration = (Math.sin(angle) - PLAYER_ACCELERATION_ANGLE) * PLAYER_ACCELERATION_MAGNITUDE;
+ var acceleration = (Math.sin(self.angle) - PLAYER_ACCELERATION_ANGLE) * PLAYER_ACCELERATION_MAGNITUDE;
var boost = self.airborne ? RAMP_SPEED_BOOST : 1;
reduction = self.invulnerable ? 1 - self.invulnerableTimer / self.invulnerableTime : 1;
speed = Math.max(0, speed * PLAYER_DECELERATION_FACTOR + acceleration);
var totalSpeed = speed * reduction * boost;
- var velocityX = Math.cos(angle) * totalSpeed;
- var velocityY = Math.sin(angle) * totalSpeed;
+ var velocityX = Math.cos(self.angle) * totalSpeed;
+ var velocityY = Math.sin(self.angle) * totalSpeed;
travelDistX += velocityX;
travelDistY += velocityY;
self.distanceTravelled = Math.sqrt(travelDistX * travelDistX + travelDistY * travelDistY);
if (!self.airborne) {
var facingSide = targetPosition.x < self.x ? -1 : 1;
- platformGraphics.rotation = angle;
+ platformGraphics.rotation = self.angle;
playerGraphics.rotation = totalSpeed * facingSide / PLAYER_TILT_SPEED_FACTOR;
playerGraphics.scale.x = facingSide;
}
return {
@@ -494,9 +522,9 @@
var self = Container.call(this);
var score = 0;
var lives = 3;
var lifeIcons = [];
- var scoreIcon = self.createAsset('scoreIcon', 'Score icon', 0.5, 0);
+ var scoreIcon = self.createAsset('scoreIcon', 'Score icon', 1, 0);
var scoreText = self.addChild(new Text2('| ' + score, {
size: 70,
fill: "#000000",
align: 'left'
@@ -511,9 +539,9 @@
lifeIcon.x = -10 - i * 60;
lifeIcon.y = scoreIcon.height + 20;
lifeIcons.push(lifeIcon);
}
- scoreText.x = -5;
+ scoreText.x = -scoreIcon.width - 5;
scoreText.y = scoreIcon.height;
scoreText.anchor.set(0, 0);
distanceText.x = STAGE_WIDTH / 2 - 350;
distanceText.y = 30;
@@ -561,8 +589,9 @@
var PLAYER_ACCELERATION_ANGLE = 0.1;
var PLAYER_ACCELERATION_MAGNITUDE = 2.0;
var PLAYER_DECELERATION_FACTOR = 0.95;
var PLAYER_TILT_SPEED_FACTOR = 110 * Math.PI / 2;
+var PLAYER_COLLECTION_HEIGHT = -100;
var PICKUP_FLIP_BASE = 10;
var PICKUP_FLIP_VARIANCE = 60;
var PICKUP_FLIP_SCALE = 0.8;
var PICKUP_COLLECT_DIST = 300;
@@ -582,8 +611,9 @@
var RAMP_CRITICAL_REDUX = 10;
var RAMP_SPEED_BOOST = 1.25;
var RAMP_SPEED_DURATION = 3.0;
var RAMP_SPEED_HEIGHT = 20.0;
+var DROP_ANGLE_VARIANCE = 10 * Math.PI / 180;
var LAYER_BACKGROUND = 0;
var LAYER_MIDGROUND = 1;
var LAYER_FOREGROUND = 2;
;
@@ -650,9 +680,9 @@
} else if (!landscapeTile.active && landscapeTile.x > -TILE_MARGIN && landscapeTile.x < STAGE_WIDTH + TILE_MARGIN && landscapeTile.y < STAGE_HEIGHT + TILE_MARGIN) {
landscapeTile.activate();
} else if (landscapeTile.checkCollision(player)) {
if (interface.changeScore(-1)) {
- effects.push(new DropEffect(self, player.x, player.y));
+ effects.push(layers[LAYER_FOREGROUND].addChild(new DropEffect(player.x, player.y + PLAYER_COLLECTION_HEIGHT, player)));
}
if (!player.invulnerable) {
player.invulnerable = true;
player.invulnerableTimer = player.invulnerableTime;
@@ -700,12 +730,12 @@
}
}
for (var i = pickupProjectileList.length - 1; i >= 0; i--) {
var pickupProjectile = pickupProjectileList[i];
- pickupProjectile.update();
- if (pickupProjectile.y < 0 || pickupProjectile.y > STAGE_HEIGHT || pickupProjectile.x < 0 || pickupProjectile.x > STAGE_WIDTH) {
+ if (pickupProjectile.update()) {
pickupProjectile.destroy();
pickupProjectileList.splice(i, 1);
+ interface.changeScore(1);
}
}
});
;
pixel art of a tree stump covered in snow. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a dead tree covered in snow. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a spruce tree covered in snow. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a rock covered in snow. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Pixel art heart icon . Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
two vertical lines with a blank background.
pixel art of a large, snow covered rock . Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of skiis . Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a floating grinch monster . Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
single green firework explosion . Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a wooden board covered in snow. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a wooden pole with snow at it's base. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
tileable white water texture pixel art.
pixel art of a red flag. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a red orb. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
white
white
pixel art shape of a red arrow pointing downwards. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art banner of a pair of skis crossed. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
white