User prompt
online skor tablosu ekler misin ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
ARAKAYA ŞARKI KOY
User prompt
MENÜDEKİ ÇUNUKLARI SİL
User prompt
MENÜDE KAÇ WİN ALSIĞIN YAZSIN ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
KEMALDEV YAZISINA 2 KERE BASARSAN WİN AL
User prompt
Add anything you want to the game ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Menu gta 2 style ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Menu gta 2 style ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
3 adet daha hero ekle
User prompt
Oyun ekranını biraz aşağı al ortala
User prompt
LOGADA OLSUN BAŞTA ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
KEMALDEV WRITE BEFORE THE MENU WHEN THE GAME STARTS ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
LET IT BE WRITE KEMALDEV AND THEN IT BE THE LOGO
User prompt
Let the game be fun and fluent ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'Uncaught ReferenceError: scoreText is not defined' in or related to this line: 'scoreText.setText('Score: ' + LK.getScore());' Line Number: 273
User prompt
Game not showing fix
User prompt
make the menu visible
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading '0')' in or related to this line: 'if (grid[y][x] === null) {' Line Number: 227
User prompt
Add menu
User prompt
remove the numbers from the heroes
Code edit (1 edits merged)
Please save this source code
Initial prompt
Hero Fusion Academy
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Hero = Container.expand(function (tier) {
var self = Container.call(this);
self.tier = tier || 1;
self.gridX = -1;
self.gridY = -1;
self.isDragging = false;
self.originalX = 0;
self.originalY = 0;
var heroAssets = ['heroTier1', 'heroTier2', 'heroTier3', 'heroTier4', 'heroTier5', 'heroTier6', 'heroTier7', 'heroTier8', 'heroTier9'];
var heroGraphics = self.attachAsset(heroAssets[self.tier - 1], {
anchorX: 0.5,
anchorY: 0.5
});
// Tier text removed - heroes now display without numbers
self.setGridPosition = function (gridX, gridY) {
self.gridX = gridX;
self.gridY = gridY;
self.x = GRID_START_X + gridX * CELL_SIZE + CELL_SIZE / 2;
self.y = GRID_START_Y + gridY * CELL_SIZE + CELL_SIZE / 2;
self.originalX = self.x;
self.originalY = self.y;
};
self.down = function (x, y, obj) {
if (!gameOver) {
self.isDragging = true;
draggedHero = self;
self.originalX = self.x;
self.originalY = self.y;
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 100
});
}
};
self.up = function (x, y, obj) {
if (self.isDragging) {
self.isDragging = false;
draggedHero = null;
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
// Check for merge
var targetGridX = Math.floor((self.x - GRID_START_X) / CELL_SIZE);
var targetGridY = Math.floor((self.y - GRID_START_Y) / CELL_SIZE);
if (targetGridX >= 0 && targetGridX < GRID_WIDTH && targetGridY >= 0 && targetGridY < GRID_HEIGHT) {
var targetHero = grid[targetGridY][targetGridX];
if (targetHero && targetHero !== self && targetHero.tier === self.tier) {
// Merge!
performMerge(self, targetHero);
return;
}
}
// Return to original position with bounce effect
tween(self, {
x: self.originalX,
y: self.originalY
}, {
duration: 300,
easing: tween.bounceOut
});
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
var GRID_WIDTH = 5;
var GRID_HEIGHT = 7;
var CELL_SIZE = 140;
var GRID_START_X = (2048 - GRID_WIDTH * CELL_SIZE) / 2;
var GRID_START_Y = 600;
var grid = [];
var heroes = [];
var draggedHero = null;
var gameOver = false;
var gameStarted = false;
var spawnTimer = 0;
var spawnInterval = 180; // 3 seconds at 60fps
var menuContainer = null;
var scoreText = null;
function showMainMenu() {
menuContainer = new Container();
menuContainer.alpha = 0;
game.addChild(menuContainer);
// Fade in menu
tween(menuContainer, {
alpha: 1
}, {
duration: 500,
easing: tween.easeOut
});
// Dark GTA 2 style background
var menuBg = LK.getAsset('gridCell', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 15,
scaleY: 20
});
menuBg.x = 2048 / 2;
menuBg.y = 2732 / 2;
menuBg.alpha = 0.95;
menuBg.tint = 0x000000;
menuContainer.addChild(menuBg);
// KEMALDEV Logo with GTA 2 style
var logoText = new Text2('KEMALDEV', {
size: 200,
fill: 0x00FF00
});
logoText.anchor.set(0.5, 0.5);
logoText.x = 2048 / 2;
logoText.y = 900;
menuContainer.addChild(logoText);
// Game title with GTA 2 style
var gameTitle = new Text2('HERO FUSION ACADEMY', {
size: 120,
fill: 0x00FF00
});
gameTitle.anchor.set(0.5, 0.5);
gameTitle.x = 2048 / 2;
gameTitle.y = 1150;
menuContainer.addChild(gameTitle);
// Add GTA 2 style pulsing animation to KEMALDEV logo
function pulseLogo() {
tween(logoText, {
scaleX: 1.2,
scaleY: 1.2,
tint: 0x00FFFF
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(logoText, {
scaleX: 1,
scaleY: 1,
tint: 0x00FF00
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: pulseLogo
});
}
});
}
pulseLogo();
// Add GTA 2 style pulsing animation to title
function pulseTitle() {
tween(gameTitle, {
scaleX: 1.05,
scaleY: 1.05,
tint: 0x00FFFF
}, {
duration: 1200,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(gameTitle, {
scaleX: 1,
scaleY: 1,
tint: 0x00FF00
}, {
duration: 1200,
easing: tween.easeInOut,
onFinish: pulseTitle
});
}
});
}
pulseTitle();
// Subtitle with GTA 2 style
var subtitle = new Text2('MERGE IDENTICAL HEROES TO CREATE POWERFUL CHAMPIONS!', {
size: 70,
fill: 0x00FFFF
});
subtitle.anchor.set(0.5, 0.5);
subtitle.x = 2048 / 2;
subtitle.y = 1300;
menuContainer.addChild(subtitle);
// GTA 2 style start button
var startButton = LK.getAsset('gridCell', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3.5,
scaleY: 1.3
});
startButton.x = 2048 / 2;
startButton.y = 1600;
startButton.alpha = 0.8;
startButton.tint = 0x001100;
menuContainer.addChild(startButton);
// Button border effect
var buttonBorder = LK.getAsset('gridCell', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 3.7,
scaleY: 1.4
});
buttonBorder.x = 2048 / 2;
buttonBorder.y = 1600;
buttonBorder.alpha = 0.6;
buttonBorder.tint = 0x00FF00;
menuContainer.addChild(buttonBorder);
menuContainer.addChild(startButton); // Re-add to be on top
var startButtonText = new Text2('>>> START GAME <<<', {
size: 90,
fill: 0x00FF00
});
startButtonText.anchor.set(0.5, 0.5);
startButtonText.x = 2048 / 2;
startButtonText.y = 1600;
menuContainer.addChild(startButtonText);
// GTA 2 style button interaction with tween effects
startButton.down = function () {
tween(startButton, {
scaleX: 3.3,
scaleY: 1.2
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(startButton, {
scaleX: 3.5,
scaleY: 1.3
}, {
duration: 100,
easing: tween.easeIn
});
}
});
// Flash button green on click
tween(startButton, {
tint: 0x00FF00
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(startButton, {
tint: 0x001100
}, {
duration: 150,
easing: tween.easeIn
});
}
});
startGame();
};
}
function startGame() {
if (menuContainer) {
menuContainer.destroy();
menuContainer = null;
}
gameStarted = true;
initializeGame();
}
function initializeGame() {
// Initialize grid
for (var y = 0; y < GRID_HEIGHT; y++) {
grid[y] = [];
for (var x = 0; x < GRID_WIDTH; x++) {
grid[y][x] = null;
// Create grid cell visuals
var cell = LK.getAsset('gridCell', {
anchorX: 0.5,
anchorY: 0.5
});
cell.x = GRID_START_X + x * CELL_SIZE + CELL_SIZE / 2;
cell.y = GRID_START_Y + y * CELL_SIZE + CELL_SIZE / 2;
cell.alpha = 0.3;
game.addChild(cell);
}
}
// Score display
scoreText = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// KEMALDEV Logo
var logoGameText = new Text2('KEMALDEV', {
size: 120,
fill: 0xFFD700
});
logoGameText.anchor.set(0.5, 0);
logoGameText.x = 2048 / 2;
logoGameText.y = 150;
game.addChild(logoGameText);
// Title
var titleText = new Text2('Hero Fusion Academy', {
size: 100,
fill: 0xFFD700
});
titleText.anchor.set(0.5, 0);
titleText.x = 2048 / 2;
titleText.y = 280;
game.addChild(titleText);
// Instructions
var instructionText = new Text2('Drag matching heroes to merge them!', {
size: 60,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 0);
instructionText.x = 2048 / 2;
instructionText.y = 400;
game.addChild(instructionText);
// Spawn initial heroes
spawnHero();
spawnHero();
}
function getEmptyCell() {
var emptyCells = [];
for (var y = 0; y < GRID_HEIGHT; y++) {
for (var x = 0; x < GRID_WIDTH; x++) {
if (grid[y][x] === null) {
emptyCells.push({
x: x,
y: y
});
}
}
}
return emptyCells.length > 0 ? emptyCells[Math.floor(Math.random() * emptyCells.length)] : null;
}
function spawnHero() {
var emptyCell = getEmptyCell();
if (emptyCell) {
var tier = Math.random() < 0.8 ? 1 : 2; // 80% chance for tier 1, 20% for tier 2
var hero = new Hero(tier);
hero.setGridPosition(emptyCell.x, emptyCell.y);
grid[emptyCell.y][emptyCell.x] = hero;
heroes.push(hero);
game.addChild(hero);
// Spawn animation
hero.scaleX = 0;
hero.scaleY = 0;
tween(hero, {
scaleX: 1,
scaleY: 1
}, {
duration: 300,
easing: tween.bounceOut
});
LK.getSound('spawn').play();
} else {
// Grid is full - game over
gameOver = true;
// Animate all heroes shrinking before game over
for (var i = 0; i < heroes.length; i++) {
tween(heroes[i], {
scaleX: 0.8,
scaleY: 0.8,
alpha: 0.5
}, {
duration: 800,
easing: tween.easeIn
});
}
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
}
}
function performMerge(hero1, hero2) {
if (hero1.tier >= 9) return; // Max tier reached
// Calculate score based on tier
var scoreIncrease = hero1.tier * 100;
LK.setScore(LK.getScore() + scoreIncrease);
scoreText.setText('Score: ' + LK.getScore());
// Remove both heroes from grid
grid[hero1.gridY][hero1.gridX] = null;
grid[hero2.gridY][hero2.gridX] = null;
// Create new hero with higher tier
var newHero = new Hero(hero1.tier + 1);
newHero.setGridPosition(hero2.gridX, hero2.gridY);
grid[hero2.gridY][hero2.gridX] = newHero;
heroes.push(newHero);
game.addChild(newHero);
// Merge animation
newHero.scaleX = 0;
newHero.scaleY = 0;
tween(newHero, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
easing: tween.easeOut
});
tween(newHero, {
scaleX: 1,
scaleY: 1
}, {
duration: 200,
easing: tween.easeIn
});
// Flash effect with color transition
LK.effects.flashObject(newHero, 0xFFFFFF, 500);
// Add golden glow effect for high-tier merges
if (newHero.tier >= 4) {
tween(newHero, {
tint: 0xFFD700
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(newHero, {
tint: 0xFFFFFF
}, {
duration: 300,
easing: tween.easeIn
});
}
});
}
// Remove old heroes
hero1.destroy();
hero2.destroy();
// Remove from heroes array
var index1 = heroes.indexOf(hero1);
if (index1 > -1) heroes.splice(index1, 1);
var index2 = heroes.indexOf(hero2);
if (index2 > -1) heroes.splice(index2, 1);
LK.getSound('merge').play();
// Check for win condition (tier 9 hero created)
if (newHero.tier >= 9) {
LK.setTimeout(function () {
LK.showYouWin();
}, 1000);
}
}
game.move = function (x, y, obj) {
if (draggedHero && draggedHero.isDragging) {
draggedHero.x = x;
draggedHero.y = y;
}
};
game.update = function () {
if (gameStarted && !gameOver) {
spawnTimer++;
if (spawnTimer >= spawnInterval) {
spawnHero();
spawnTimer = 0;
// Gradually decrease spawn interval to increase difficulty
if (spawnInterval > 120) {
spawnInterval -= 2;
}
}
}
};
// Show KEMALDEV splash screen first, then main menu
showKemaldevSplash();
function showKemaldevSplash() {
var splashContainer = new Container();
splashContainer.alpha = 0;
game.addChild(splashContainer);
// Black background for splash
var splashBg = LK.getAsset('gridCell', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 20,
scaleY: 25
});
splashBg.x = 2048 / 2;
splashBg.y = 2732 / 2;
splashBg.tint = 0x000000;
splashContainer.addChild(splashBg);
// Large KEMALDEV text positioned at the top
var kemaldevText = new Text2('KEMALDEV', {
size: 300,
fill: 0xFFD700
});
kemaldevText.anchor.set(0.5, 0.5);
kemaldevText.x = 2048 / 2;
kemaldevText.y = 800;
kemaldevText.alpha = 0;
kemaldevText.scaleX = 0.5;
kemaldevText.scaleY = 0.5;
splashContainer.addChild(kemaldevText);
// Developer subtitle
var devText = new Text2('Game Developer', {
size: 120,
fill: 0xFFFFFF
});
devText.anchor.set(0.5, 0.5);
devText.x = 2048 / 2;
devText.y = 1200;
devText.alpha = 0;
splashContainer.addChild(devText);
// Fade in splash screen
tween(splashContainer, {
alpha: 1
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
// Animate KEMALDEV text entrance with scale and fade
tween(kemaldevText, {
alpha: 1,
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 1000,
easing: tween.bounceOut,
onFinish: function onFinish() {
// Scale back to normal size
tween(kemaldevText, {
scaleX: 1,
scaleY: 1
}, {
duration: 400,
easing: tween.easeOut,
onFinish: function onFinish() {
// Fade in subtitle
tween(devText, {
alpha: 1
}, {
duration: 500,
easing: tween.easeOut,
onFinish: function onFinish() {
// Add pulsing effect to logo
function pulseLogo() {
tween(kemaldevText, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(kemaldevText, {
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: pulseLogo
});
}
});
}
pulseLogo();
// Hold for a moment, then fade out and show menu
LK.setTimeout(function () {
tween(splashContainer, {
alpha: 0
}, {
duration: 800,
easing: tween.easeIn,
onFinish: function onFinish() {
splashContainer.destroy();
showMainMenu();
}
});
}, 2500);
}
});
}
});
}
});
}
});
} ===================================================================
--- original.js
+++ change.js
@@ -110,125 +110,159 @@
}, {
duration: 500,
easing: tween.easeOut
});
- // Menu background
+ // Dark GTA 2 style background
var menuBg = LK.getAsset('gridCell', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 15,
scaleY: 20
});
menuBg.x = 2048 / 2;
menuBg.y = 2732 / 2;
- menuBg.alpha = 0.8;
+ menuBg.alpha = 0.95;
+ menuBg.tint = 0x000000;
menuContainer.addChild(menuBg);
- // KEMALDEV Logo
+ // KEMALDEV Logo with GTA 2 style
var logoText = new Text2('KEMALDEV', {
- size: 180,
- fill: 0xFFD700
+ size: 200,
+ fill: 0x00FF00
});
logoText.anchor.set(0.5, 0.5);
logoText.x = 2048 / 2;
- logoText.y = 1000;
+ logoText.y = 900;
menuContainer.addChild(logoText);
- // Game title with pulsing animation
- var gameTitle = new Text2('Hero Fusion Academy', {
- size: 140,
- fill: 0xFFD700
+ // Game title with GTA 2 style
+ var gameTitle = new Text2('HERO FUSION ACADEMY', {
+ size: 120,
+ fill: 0x00FF00
});
gameTitle.anchor.set(0.5, 0.5);
gameTitle.x = 2048 / 2;
- gameTitle.y = 1200;
+ gameTitle.y = 1150;
menuContainer.addChild(gameTitle);
- // Add pulsing animation to KEMALDEV logo
+ // Add GTA 2 style pulsing animation to KEMALDEV logo
function pulseLogo() {
tween(logoText, {
- scaleX: 1.15,
- scaleY: 1.15
+ scaleX: 1.2,
+ scaleY: 1.2,
+ tint: 0x00FFFF
}, {
- duration: 800,
+ duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(logoText, {
scaleX: 1,
- scaleY: 1
+ scaleY: 1,
+ tint: 0x00FF00
}, {
- duration: 800,
+ duration: 1000,
easing: tween.easeInOut,
onFinish: pulseLogo
});
}
});
}
pulseLogo();
- // Add pulsing animation to title
+ // Add GTA 2 style pulsing animation to title
function pulseTitle() {
tween(gameTitle, {
- scaleX: 1.1,
- scaleY: 1.1
+ scaleX: 1.05,
+ scaleY: 1.05,
+ tint: 0x00FFFF
}, {
- duration: 1000,
+ duration: 1200,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(gameTitle, {
scaleX: 1,
- scaleY: 1
+ scaleY: 1,
+ tint: 0x00FF00
}, {
- duration: 1000,
+ duration: 1200,
easing: tween.easeInOut,
onFinish: pulseTitle
});
}
});
}
pulseTitle();
- // Subtitle
- var subtitle = new Text2('Merge identical heroes to create powerful champions!', {
- size: 80,
- fill: 0xFFFFFF
+ // Subtitle with GTA 2 style
+ var subtitle = new Text2('MERGE IDENTICAL HEROES TO CREATE POWERFUL CHAMPIONS!', {
+ size: 70,
+ fill: 0x00FFFF
});
subtitle.anchor.set(0.5, 0.5);
subtitle.x = 2048 / 2;
- subtitle.y = 1400;
+ subtitle.y = 1300;
menuContainer.addChild(subtitle);
- // Start button
+ // GTA 2 style start button
var startButton = LK.getAsset('gridCell', {
anchorX: 0.5,
anchorY: 0.5,
- scaleX: 3,
- scaleY: 1.2
+ scaleX: 3.5,
+ scaleY: 1.3
});
startButton.x = 2048 / 2;
- startButton.y = 1800;
- startButton.alpha = 0.9;
+ startButton.y = 1600;
+ startButton.alpha = 0.8;
+ startButton.tint = 0x001100;
menuContainer.addChild(startButton);
- var startButtonText = new Text2('START GAME', {
- size: 100,
- fill: 0xFFFFFF
+ // Button border effect
+ var buttonBorder = LK.getAsset('gridCell', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 3.7,
+ scaleY: 1.4
});
+ buttonBorder.x = 2048 / 2;
+ buttonBorder.y = 1600;
+ buttonBorder.alpha = 0.6;
+ buttonBorder.tint = 0x00FF00;
+ menuContainer.addChild(buttonBorder);
+ menuContainer.addChild(startButton); // Re-add to be on top
+ var startButtonText = new Text2('>>> START GAME <<<', {
+ size: 90,
+ fill: 0x00FF00
+ });
startButtonText.anchor.set(0.5, 0.5);
startButtonText.x = 2048 / 2;
- startButtonText.y = 1800;
+ startButtonText.y = 1600;
menuContainer.addChild(startButtonText);
- // Button interaction with tween effects
+ // GTA 2 style button interaction with tween effects
startButton.down = function () {
tween(startButton, {
- scaleX: 2.8,
- scaleY: 1.1
+ scaleX: 3.3,
+ scaleY: 1.2
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(startButton, {
- scaleX: 3,
- scaleY: 1.2
+ scaleX: 3.5,
+ scaleY: 1.3
}, {
duration: 100,
easing: tween.easeIn
});
}
});
+ // Flash button green on click
+ tween(startButton, {
+ tint: 0x00FF00
+ }, {
+ duration: 150,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(startButton, {
+ tint: 0x001100
+ }, {
+ duration: 150,
+ easing: tween.easeIn
+ });
+ }
+ });
startGame();
};
}
function startGame() {
pixel art Hulk. In-Game asset. 2d. High contrast. No shadows
attack on titan colossal titan pixel art. In-Game asset. 2d. High contrast. No shadows
KANEKİ PİXEL ART GHOUL. In-Game asset. 2d. High contrast. No shadows
PİXEL ART SİLVER SURFER. In-Game asset. 2d. High contrast. No shadows
Pixel art
pixel art red gurdian. In-Game asset. 2d. High contrast. No shadows
pixel art Hero. In-Game asset. 2d. High contrast. No shadows
PNG