User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'attachAsset')' in or related to this line: 'var fishGraphics = self.attachAsset('zebraDanio', {' Line Number: 116
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'attachAsset')' in or related to this line: 'var fishGraphics = self.attachAsset('zebraDanio', {' Line Number: 111
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'attachAsset')' in or related to this line: 'var fishGraphics = self.attachAsset('zebraDanio', {' Line Number: 106
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'attachAsset')' in or related to this line: 'var fishGraphics = self.attachAsset('zebraDanio', {' Line Number: 109
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'attachAsset')' in or related to this line: 'self.fishGraphics = self.attachAsset('zebraDanio', {' Line Number: 106
User prompt
Migrate to the latest version of LK
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'attachAsset')' in or related to this line: 'var fishGraphics = self.attachAsset('zebraDanio', {' Line Number: 106
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'attachAsset')' in or related to this line: 'self.fishGraphics = self.attachAsset('zebraDanio', {' Line Number: 106
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'attachAsset')' in or related to this line: 'var fishGraphics = self.attachAsset('zebraDanio', {' Line Number: 106
User prompt
Migrate to the latest version of LK
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'createAsset')' in this line: 'var fishGraphics = self.createAsset('zebraDanio', 'Zebra Danio Graphics', .5, .5);' Line Number: 25
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'createAsset')' in this line: 'self.fishGraphics = self.createAsset('zebraDanio', 'Zebra Danio Graphics', .5, .5);' Line Number: 25
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'createAsset')' in this line: 'self.fishGraphics = self.createAsset('zebraDanio', 'Zebra Danio Graphics', .5, .5);' Line Number: 25
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'createAsset')' in this line: 'self.fishGraphics = self.createAsset('zebraDanio', 'Zebra Danio Graphics', .5, .5);' Line Number: 52
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'createAsset')' in this line: 'var fishGraphics = self.createAsset('zebraDanio', 'Zebra Danio Graphics', .5, .5);' Line Number: 169
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'createAsset')' in this line: 'self.fishGraphics = self.createAsset('zebraDanio', 'Zebra Danio Graphics', .5, .5);' Line Number: 169
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'createAsset')' in this line: 'var fishGraphics = self.createAsset('zebraDanio', 'Zebra Danio Graphics', .5, .5);' Line Number: 169
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'createAsset')' in this line: 'var fishGraphics = self.createAsset('zebraDanio', 'Zebra Danio Graphics', .5, .5);' Line Number: 168
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'createAsset')' in this line: 'var fishGraphics = self.createAsset('zebraDanio', 'Zebra Danio Graphics', .5, .5);' Line Number: 168
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'createAsset')' in this line: 'var fishGraphics = self.createAsset('zebraDanio', 'Zebra Danio Graphics', .5, .5);' Line Number: 168
User prompt
Improve the fluidity
User prompt
Make dรฉcoration 600 pixel up
User prompt
Move the dรฉcoration in the aquarium
User prompt
Fix Bug: 'Uncaught ReferenceError: aquarium is not defined' in this line: 'var waterBounds = aquarium.getWaterBounds();' Line Number: 1351
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'getWaterBounds')' in this line: 'var waterBounds = self.aquarium.getWaterBounds();' Line Number: 1255
/**** 
* Classes
****/ 
var Aquarium = Container.expand(function () {
	var self = Container.call(this);
	this.getWaterBounds = function () {
		var waterGraphics = LK.getAsset('water', {});
		return {
			left: (2048 - waterGraphics.width) / 2,
			right: (2048 + waterGraphics.width) / 2,
			top: (2732 - waterGraphics.height) / 2 - 150,
			bottom: (2732 + waterGraphics.height) / 2 - 150
		};
	};
	var aquariumGraphics = self.attachAsset('aquarium', {});
	aquariumGraphics.width = 2048 * 1.3;
	aquariumGraphics.height = 2732 * 1.3;
	aquariumGraphics.x = (2048 - aquariumGraphics.width) / 2;
	aquariumGraphics.y = (2732 - aquariumGraphics.height) / 2;
	self.addChild(aquariumGraphics);
	var waterGraphics = self.attachAsset('water', {});
	waterGraphics.width = 2048 / 3 * 2 * 1.08;
	waterGraphics.height = 2732 / 3 * 1.26;
	waterGraphics.x = (2048 - waterGraphics.width) / 2;
	waterGraphics.y = (2732 - waterGraphics.height) / 2 - 150;
	waterGraphics.alpha = 0.8;
	self.addChild(waterGraphics);
});
var Fish = Container.expand(function () {
	var self = Container.call(this);
	self.avoidObstacles = function (obstacles) {};
	self.isPathBlocked = function (newX, newY, obstacles) {
		return false;
	};
	self.getNearbyObstacles = function () {
		return [];
	};
	this.getWaterBounds = function () {
		var waterGraphics = LK.getAsset('water', {});
		return {
			left: (2048 - waterGraphics.width) / 2,
			right: (2048 + waterGraphics.width) / 2,
			top: (2732 - waterGraphics.height) / 2 - 150,
			bottom: (2732 + waterGraphics.height) / 2 - 150
		};
	};
});
var ZebraDanio = Fish.expand(function () {
	var self = Fish.call(this);
	self.fishGraphics = self.attachAsset('zebraDanio', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.4;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 90 + 45;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		self.fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		self.fishGraphics.rotation = self.rotation;
	};
});
var YellowTang = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('yellowTang', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.5;
	self._move_migrated = function () {};
});
var Wrasses = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('wrasses', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.42;
	self._move_migrated = function () {};
});
var Tangfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('tangfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.47;
	self._move_migrated = function () {};
});
var Surgeonfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('surgeonfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = (Math.random() * 0.2 + 0.5) * 2;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 120 + 60;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		var newX = self.x + Math.cos(self.rotation) * self.speed;
		var newY = self.y + Math.sin(self.rotation) * self.speed;
		var obstacles = self.getNearbyObstacles();
		if (self.isPathBlocked(newX, newY, obstacles)) {
			self.avoidObstacles(obstacles);
		} else {
			self.x = newX;
			self.y = newY;
		}
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var Sunfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('sunfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.6;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 200 + 100;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var Starfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('starfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.5;
	self._move_migrated = function () {
		self.x += Math.sin(LK.ticks / 30) * self.speed;
		self.y += Math.cos(LK.ticks / 30) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right || self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.x = Math.max(waterBounds.left, Math.min(self.x, waterBounds.right));
			self.y = Math.max(waterBounds.top, Math.min(self.y, waterBounds.bottom));
		}
		fishGraphics.rotation = LK.ticks / 30;
	};
});
var RoyalGramma = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('royalGramma', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.5;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 160 + 100;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var RibbonEel = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('ribbonEel', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.6;
	self._move_migrated = function () {};
});
var RainbowTrout = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('rainbowTrout', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.53;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 160 + 120;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var Pufferfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('pufferfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.4;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 140 + 80;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		var tentativeX = self.x + Math.cos(self.rotation) * self.speed;
		var tentativeY = self.y + Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		tentativeX = Math.max(waterBounds.left, Math.min(tentativeX, waterBounds.right));
		tentativeY = Math.max(waterBounds.top, Math.min(tentativeY, waterBounds.bottom));
		self.x = tentativeX;
		self.y = tentativeY;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var PsychedelicFrogfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('psychedelicFrogfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.4;
	self._move_migrated = function () {};
});
var PeacockBass = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('peacockBass', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.65;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 220 + 160;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed * 1.6;
		self.y += Math.sin(self.rotation) * self.speed * 1.6;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var Parrotfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('parrotfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.50;
	self._move_migrated = function () {};
});
var OscarFish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('oscarFish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.5;
	self._move_migrated = function () {
		if (self.targetRotation === undefined || LK.ticks - self.rotationStartTime >= self.rotationDuration) {
			self.targetRotation = Math.random() * Math.PI * 2;
			self.rotationStartTime = LK.ticks;
			self.rotationDuration = Math.random() * 150 + 100;
		}
		var progress = (LK.ticks - self.rotationStartTime) / self.rotationDuration;
		if (progress < 1) {
			var deltaRotation = (self.targetRotation - self.rotation) * progress;
			self.rotation += deltaRotation;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		if (Math.cos(self.rotation) < 0) {
			fishGraphics.scale.x = -1;
		} else {
			fishGraphics.scale.x = 1;
		}
		fishGraphics.rotation = self.rotation;
	};
});
var NeonTetra = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('neonTetra', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.3;
	self._move_migrated = function () {
		if (self.targetRotation === undefined || LK.ticks - self.rotationStartTime >= self.rotationDuration) {
			self.targetRotation = Math.random() * Math.PI * 2;
			self.rotationStartTime = LK.ticks;
			self.rotationDuration = Math.random() * 100 + 50;
		}
		var progress = (LK.ticks - self.rotationStartTime) / self.rotationDuration;
		if (progress < 1) {
			var deltaRotation = (self.targetRotation - self.rotation) * progress;
			self.rotation += deltaRotation;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		if (Math.cos(self.rotation) < 0) {
			fishGraphics.scale.x = -1;
		} else {
			fishGraphics.scale.x = 1;
		}
		fishGraphics.rotation = self.rotation;
	};
});
var MoorishIdol = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('moorishidol', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.43;
	self._move_migrated = function () {};
});
var Moonfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('moonfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.55;
	self._move_migrated = function () {
		self.x += Math.cos(LK.ticks / 60) * self.speed;
		self.y += Math.sin(LK.ticks / 60) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right || self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.x = Math.max(waterBounds.left, Math.min(self.x, waterBounds.right));
			self.y = Math.max(waterBounds.top, Math.min(self.y, waterBounds.bottom));
		}
		fishGraphics.rotation = Math.atan2(Math.sin(LK.ticks / 60), Math.cos(LK.ticks / 60));
	};
});
var Mandarinfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('mandarinfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.4;
	self._move_migrated = function () {};
});
var Lionfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('lionfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.5;
	self._move_migrated = function () {};
});
var LeafySeaDragon = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('leafySeaDragon', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.4;
	self._move_migrated = function () {};
});
var KoiFish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('koiFish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.48;
	self._move_migrated = function () {
		if (self.targetRotation === undefined || LK.ticks - self.rotationStartTime >= self.rotationDuration) {
			self.targetRotation = Math.random() * Math.PI * 2;
			self.rotationStartTime = LK.ticks;
			self.rotationDuration = Math.random() * 130 + 70;
		}
		var progress = (LK.ticks - self.rotationStartTime) / self.rotationDuration;
		if (progress < 1) {
			var deltaRotation = (self.targetRotation - self.rotation) * progress;
			self.rotation += deltaRotation;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		if (Math.cos(self.rotation) < 0) {
			fishGraphics.scale.x = -1;
		} else {
			fishGraphics.scale.x = 1;
		}
		fishGraphics.rotation = self.rotation;
	};
});
var GuppyFish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('guppyFish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.35;
	self._move_migrated = function () {
		if (self.targetRotation === undefined || LK.ticks - self.rotationStartTime >= self.rotationDuration) {
			self.targetRotation = Math.random() * Math.PI * 2;
			self.rotationStartTime = LK.ticks;
			self.rotationDuration = Math.random() * 100 + 50;
		}
		var progress = (LK.ticks - self.rotationStartTime) / self.rotationDuration;
		if (progress < 1) {
			var deltaRotation = (self.targetRotation - self.rotation) * progress;
			self.rotation += deltaRotation;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		if (Math.cos(self.rotation) < 0) {
			fishGraphics.scale.x = -1;
		} else {
			fishGraphics.scale.x = 1;
		}
		fishGraphics.rotation = self.rotation;
	};
});
var Goldfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('goldfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.4;
	self._move_migrated = function () {
		if (self.targetRotation === undefined || LK.ticks - self.rotationStartTime >= self.rotationDuration) {
			self.targetRotation = Math.random() * Math.PI * 2;
			self.rotationStartTime = LK.ticks;
			self.rotationDuration = Math.random() * 140 + 80;
		}
		var progress = (LK.ticks - self.rotationStartTime) / self.rotationDuration;
		if (progress < 1) {
			var deltaRotation = (self.targetRotation - self.rotation) * progress;
			self.rotation += deltaRotation;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		if (Math.cos(self.rotation) < 0) {
			fishGraphics.scale.x = -1;
		} else {
			fishGraphics.scale.x = 1;
		}
		fishGraphics.rotation = self.rotation;
	};
});
var GlassCatfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('glassCatfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.45;
	self._move_migrated = function () {
		self.x += Math.cos(LK.ticks / 100) * self.speed;
		self.y += Math.sin(LK.ticks / 100) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right || self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.x = Math.max(waterBounds.left, Math.min(self.x, waterBounds.right));
			self.y = Math.max(waterBounds.top, Math.min(self.y, waterBounds.bottom));
		}
		fishGraphics.rotation = Math.atan2(Math.sin(LK.ticks / 100), Math.cos(LK.ticks / 100));
	};
});
var FlameScallop = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('flameScallop', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.3;
	self._move_migrated = function () {};
});
var FlameHawkfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('flameHawkfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.48;
	self._move_migrated = function () {};
});
var FlameAngel = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('flameAngel', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.55;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 170 + 90;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var EmperorFish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('emperorFish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.5;
	self._move_migrated = function () {};
});
var EmeraldGoby = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('emeraldGoby', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.42;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 110 + 55;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var ElectricCatfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('electricCatfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.58;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 190 + 130;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var ElectricBlueDamsel = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('electricBlueDamsel', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.45;
	self._move_migrated = function () {};
});
var DiscusFish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('discusFish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.45;
	self._move_migrated = function () {
		if (self.targetRotation === undefined || LK.ticks - self.rotationStartTime >= self.rotationDuration) {
			self.targetRotation = Math.random() * Math.PI * 2;
			self.rotationStartTime = LK.ticks;
			self.rotationDuration = Math.random() * 120 + 60;
		}
		var progress = (LK.ticks - self.rotationStartTime) / self.rotationDuration;
		if (progress < 1) {
			var deltaRotation = (self.targetRotation - self.rotation) * progress;
			self.rotation += deltaRotation;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		if (Math.cos(self.rotation) < 0) {
			fishGraphics.scale.x = -1;
		} else {
			fishGraphics.scale.x = 1;
		}
		fishGraphics.rotation = self.rotation;
	};
});
var DiamondTetra = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('diamondTetra', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.4;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 100 + 50;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var Dartfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('dartfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.45;
	self._move_migrated = function () {};
});
var CrimsonSnapper = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('crimsonSnapper', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.57;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 130 + 65;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var CometFish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('cometFish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.6;
	self._move_migrated = function () {
		self.x += Math.cos(LK.ticks / 70) * self.speed;
		self.y += Math.sin(LK.ticks / 70) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right || self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.x = Math.max(waterBounds.left, Math.min(self.x, waterBounds.right));
			self.y = Math.max(waterBounds.top, Math.min(self.y, waterBounds.bottom));
		}
		fishGraphics.rotation = Math.atan2(Math.sin(LK.ticks / 70), Math.cos(LK.ticks / 70));
	};
});
var Clownfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('clownfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.4;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 110 + 70;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		var tentativeX = self.x + Math.cos(self.rotation) * self.speed * 2;
		var tentativeY = self.y + Math.sin(self.rotation) * self.speed * 2;
		var waterBounds = self.getWaterBounds();
		tentativeX = Math.max(waterBounds.left, Math.min(tentativeX, waterBounds.right));
		tentativeY = Math.max(waterBounds.top, Math.min(tentativeY, waterBounds.bottom));
		self.x = tentativeX;
		self.y = tentativeY;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var ClownTriggerfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('clownTriggerfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.5;
	self._move_migrated = function () {};
});
var CelestialPearlDanio = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('celestialPearlDanio', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.35;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 80 + 40;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var CardinalTetra = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('cardinalTetra', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.3;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 90 + 60;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var Butterflyfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('butterflyfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.45;
	self._move_migrated = function () {};
});
var BlueTang = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('blueTang', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.52;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 150 + 110;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
var BettaFish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('bettaFish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.5;
	self._move_migrated = function () {
		if (self.targetRotation === undefined || LK.ticks - self.rotationStartTime >= self.rotationDuration) {
			self.targetRotation = Math.random() * Math.PI * 2;
			self.rotationStartTime = LK.ticks;
			self.rotationDuration = Math.random() * 150 + 100;
		}
		var progress = (LK.ticks - self.rotationStartTime) / self.rotationDuration;
		if (progress < 1) {
			var deltaRotation = (self.targetRotation - self.rotation) * progress;
			self.rotation += deltaRotation;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		self.rotation = self.rotation % (Math.PI * 2);
		if (Math.cos(self.rotation) < 0) {
			fishGraphics.scale.x = -1;
		} else {
			fishGraphics.scale.x = 1;
		}
		fishGraphics.rotation = self.rotation;
	};
});
var Bannerfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('bannerfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.46;
	self._move_migrated = function () {};
});
var Angelfish = Fish.expand(function () {
	var self = Fish.call(this);
	var fishGraphics = self.attachAsset('angelfish', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	fishGraphics.scale.set(1, 1);
	self.speed = Math.random() * 0.2 + 0.45;
	self._move_migrated = function () {
		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
			self.directionChangeTime = LK.ticks;
			self.directionChangeInterval = Math.random() * 130 + 90;
			self.targetRotation = Math.random() * Math.PI * 2;
		}
		var progress = (LK.ticks - self.directionChangeTime) / self.directionChangeInterval;
		if (progress < 1) {
			self.rotation += (self.targetRotation - self.rotation) * progress;
		} else {
			self.rotation = self.targetRotation;
		}
		self.x += Math.cos(self.rotation) * self.speed;
		self.y += Math.sin(self.rotation) * self.speed;
		var waterBounds = self.getWaterBounds();
		if (self.x < waterBounds.left || self.x > waterBounds.right) {
			self.rotation = Math.PI - self.rotation;
		}
		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
			self.rotation = -self.rotation;
		}
		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
		fishGraphics.rotation = self.rotation;
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
var aquarium = game.addChild(new Aquarium());
game.setBackgroundColor(0x008080);
var fishes = [];
var fishTypes = [Wrasses, Parrotfish, Dartfish, MoorishIdol, Tangfish, Bannerfish, Butterflyfish, Mandarinfish, Lionfish, Surgeonfish, Pufferfish, Clownfish, Angelfish, KoiFish, EmperorFish, Goldfish, Sunfish, GuppyFish, BettaFish, DiscusFish, NeonTetra, OscarFish, PsychedelicFrogfish, FlameScallop, RibbonEel, LeafySeaDragon, ClownTriggerfish, ElectricBlueDamsel, YellowTang, FlameHawkfish, RoyalGramma, FlameAngel, BlueTang, Moonfish, Starfish, CardinalTetra];
var fishTypes = [ZebraDanio, CelestialPearlDanio, Wrasses, Parrotfish, Dartfish, MoorishIdol, Tangfish, Bannerfish, Butterflyfish, Mandarinfish, Lionfish, Surgeonfish, Pufferfish, Clownfish, Angelfish, KoiFish, EmperorFish, Goldfish, Sunfish, GuppyFish, BettaFish, DiscusFish, NeonTetra, OscarFish, ElectricCatfish, RainbowTrout, PsychedelicFrogfish, FlameScallop, RibbonEel, LeafySeaDragon, ClownTriggerfish, ElectricBlueDamsel, YellowTang, FlameHawkfish, RoyalGramma, FlameAngel, BlueTang, Moonfish, Starfish, GlassCatfish, DiamondTetra, PeacockBass, CrimsonSnapper, CardinalTetra, CometFish, EmeraldGoby];
fishTypes.forEach(function (fishType) {
	var fish = new fishType();
	if (typeof fish._move_migrated === 'function') {
		var waterBounds = aquarium.getWaterBounds();
		var centerX = waterBounds.left + (waterBounds.right - waterBounds.left) / 2;
		var centerY = waterBounds.top + (waterBounds.bottom - waterBounds.top) / 2;
		var maxDistance = 600;
		var angle = Math.random() * Math.PI * 2;
		var distance = Math.random() * maxDistance;
		fish.x = centerX + Math.cos(angle) * distance;
		fish.y = centerY + Math.sin(angle) * distance;
		fishes.push(fish);
		game.addChild(fish);
	}
});
LK.on('tick', function () {
	for (var i = 0; i < fishes.length; i++) {
		fishes[i]._move_migrated();
	}
}); ===================================================================
--- original.js
+++ change.js
@@ -46,13 +46,13 @@
 	};
 });
 var ZebraDanio = Fish.expand(function () {
 	var self = Fish.call(this);
-	var fishGraphics = self.attachAsset('zebraDanio', {
+	self.fishGraphics = self.attachAsset('zebraDanio', {
 		anchorX: 0.5,
 		anchorY: 0.5
 	});
-	fishGraphics.scale.set(1, 1);
+	self.fishGraphics.scale.set(1, 1);
 	self.speed = Math.random() * 0.2 + 0.4;
 	self._move_migrated = function () {
 		if (!self.directionChangeTime || LK.ticks - self.directionChangeTime > self.directionChangeInterval) {
 			self.directionChangeTime = LK.ticks;
@@ -74,10 +74,10 @@
 		if (self.y < waterBounds.top || self.y > waterBounds.bottom) {
 			self.rotation = -self.rotation;
 		}
 		self.rotation = self.rotation % (Math.PI * 2);
-		fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
-		fishGraphics.rotation = self.rotation;
+		self.fishGraphics.scale.x = Math.cos(self.rotation) < 0 ? -1 : 1;
+		self.fishGraphics.rotation = self.rotation;
 	};
 });
 var YellowTang = Fish.expand(function () {
 	var self = Fish.call(this);
:quality(85)/https://cdn.frvr.ai/65901b849af797c685c9d5a9.png%3F3) 
 An aquarium with no fish on a sheel in a photorealistic style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65901ee69af797c685c9d5d3.png%3F3) 
 A realistic goldfish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/659021acbd75f3a7ac7df9d8.png%3F3) 
 A realistic Angelfish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/659033c09802d1b888c1e3ed.png%3F3) 
 A realistic koyfish swiming to the right. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/6590341d9802d1b888c1e3fb.png%3F3) 
 A realistic gupyfish swiming to the right. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/659034799802d1b888c1e404.png%3F3) 
 A realistic bettafish swiming to the right. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/659034d89802d1b888c1e410.png%3F3) 
 A realistic clownfish swiming to the right. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/6590354e9802d1b888c1e41c.png%3F3) 
 A realistic pufferfish swiming to the right. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/659036039802d1b888c1e432.png%3F3) 
 A realistic surgeonfish swiming to the right. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65906ece9802d1b888c1e631.png%3F3) 
 A realistic buble of water. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65906f449802d1b888c1e63a.png%3F3) 
 A realistic fish egg. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65914f82ec42d46d1580df61.png%3F3) 
 A realistic celestial pearl danio. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65915115ec42d46d1580dfa8.png%3F3) 
 A realistic Parrotfish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/659152beec42d46d1580e00a.png%3F3) 
 A realistic dartfish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/6591533bec42d46d1580e022.png%3F3) 
 A realistic moorishidol. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/659153b2ec42d46d1580e02c.png%3F3) 
 A realistic tangfish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65915477ec42d46d1580e052.png%3F3) 
 A realistic bannerfish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65915514ec42d46d1580e06b.png%3F3) 
 A realistic butterflyfish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65915599ec42d46d1580e07a.png%3F3) 
 A realistic mandarinfish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65916bbaa0750c7c9b32e597.png%3F3) 
 a realistic lionfish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65916c5ca0750c7c9b32e5a5.png%3F3) 
 a realistic emperorFish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65916ccba0750c7c9b32e5af.png%3F3) 
 a realistic sunfish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65916e6da0750c7c9b32e5b9.png%3F3) 
 a realistic discusFish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65916eeaa0750c7c9b32e5c5.png%3F3) 
 a realistic neonTetra. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65916feda0750c7c9b32e5d1.png%3F3) 
 a realistic oscarFish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/6697ab29650bf6b3f3eb7166.png%3F3) 
 a cardinal tetra. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/6697ab70650bf6b3f3eb7171.png%3F3) 
 a tang fish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/6697abb7650bf6b3f3eb717d.png%3F3) 
 a clown fish. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.