Code edit (2 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Button2 is not defined' in or related to this line: 'var startButton = new Button2("Start Game", function () {' Line Number: 574
User prompt
Please fix the bug: 'clearScene is not defined' in or related to this line: 'clearScene();' Line Number: 555
Code edit (2 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Button2 is not defined' in or related to this line: 'var startButton = new Button2("Start Game", function () {' Line Number: 563
User prompt
Please fix the bug: 'clearScene is not defined' in or related to this line: 'clearScene();' Line Number: 555
Code edit (1 edits merged)
Please save this source code
User prompt
Roll Souls
Initial prompt
reate a complete 2D meme parody game called Roll Souls using only placeholder graphics (squares, text, colors). The game should have a full flow from main menu to final boss and ending, all based around rolling to survive. Do not include custom art. Only use simple placeholder visuals like white square = player, red square = boss, gray = background, orange = grill, etc. The game flow should work like this: Main Menu Scene Name: mainMenuScene Show dark background Text: Welcome, Unchosen One. Button: Start Game → goes to introScene Intro Scene Name: introScene Show text: From the creators of FromSoftware... After 5 seconds, replace with: ...I have no idea. I don’t know them. After 2 more seconds → go to howToScene Fake Tutorial Scene Name: howToScene Show black screen Text: Press E to block. Or don’t press. If player presses E → Show YOU DIED Text: Did you check the title of the game? Button: How to Play AGAIN → goes to realTutorialScene If player does nothing for 6 seconds → auto go to realTutorialScene Real Tutorial Scene Name: realTutorialScene Show 3 tutorial messages: Click Left Mouse Button to ROLL toward the cursor. You can roll up to 3 times before stamina runs out. That’s it. That’s the whole game. Button: Let’s Roll → goes to boss1Scene Boss 1 Scene Name: boss1Scene Player: white square Player always moves slowly toward the mouse cursor Left-click = roll in direction of cursor Max 3 rolls, then cooldown Boss: red square, stands still, shoots blue bullets at player Player dies in 1 hit unless they have extra hearts Boss HP goes down slowly over 2 minutes If player survives 2 minutes → show GRILL LIT, go to grillScene HP/Heart System: Player starts with 1 heart = dies in 1 hit Every 5 total deaths, the player gains +1 heart (permanent) After 5 deaths = 2 hearts After 10 deaths = 3 hearts After 15 deaths = 4 hearts Taking damage removes 1 heart. If hearts = 0, show YOU DIED Grill Scene (Hub) Name: grillScene Background with orange square = grill Text: GRILL LIT Show 3 buttons: Upgrade Roll → shows random silly text like “You feel... no different.” Rest at Grill → shows “Resting...” Final Boss → goes to boss2Scene Final Boss Scene Name: boss2Scene Harder boss: faster bullets, less warning Same roll mechanics, same 2-minute survival Player movement = same: follows mouse If player survives → go to endingScene Ending Scene Name: endingScene Zoom in on player at grill Show text: TRUE ENDING UNLOCKED You have conquered all... but was it worth it? Thanks for playing Roll Souls. Try touching grass now. Optional fake buttons: New Game+, Summon Friend (does nothing) ✅ Use only placeholder graphics ✅ The game starts at mainMenuScene and must flow all the way to endingScene ✅ Player always moves toward cursor ✅ Full heart system included ✅ Every scene and transition should be implemented
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
totalDeaths: 0,
maxHearts: 3,
currentLevel: 0,
bossesDefeated: 0
});
/****
* Classes
****/
var Boss = Container.expand(function () {
var self = Container.call(this);
var bossGraphics = self.attachAsset('boss', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 100;
self.maxHealth = 100;
self.speed = 5;
self.attackCooldown = 0;
self.attackPattern = 0;
self.attacks = [];
self.stunned = false;
self.stunDuration = 0;
self.dead = false;
self.phase = 1;
self.startAttackPattern = function () {
if (self.dead) {
return;
}
self.attackPattern = (self.attackPattern + 1) % 3;
switch (self.attackPattern) {
case 0:
self.circleAttack();
break;
case 1:
self.lineAttack();
break;
case 2:
self.chargeAttack();
break;
}
// Schedule next attack
self.attackCooldown = 90 + Math.floor(Math.random() * 60); // 1.5-2.5 seconds
};
self.circleAttack = function () {
LK.getSound('bossAttack').play();
var center = {
x: self.x,
y: self.y
};
var count = 8;
var radius = 300;
for (var i = 0; i < count; i++) {
var angle = i / count * Math.PI * 2;
var posX = center.x + Math.cos(angle) * radius;
var posY = center.y + Math.sin(angle) * radius;
self.createAttack(posX, posY, 3000);
}
};
self.lineAttack = function () {
LK.getSound('bossAttack').play();
// Create a line of attacks from boss to player
var targetX = player.x;
var targetY = player.y;
var count = 5;
for (var i = 0; i < count; i++) {
var t = i / (count - 1);
var posX = self.x + (targetX - self.x) * t;
var posY = self.y + (targetY - self.y) * t;
var delay = i * 200;
LK.setTimeout(function (x, y) {
return function () {
self.createAttack(x, y, 2000);
};
}(posX, posY), delay);
}
};
self.chargeAttack = function () {
LK.getSound('bossAttack').play();
// Calculate direction to player
var dx = player.x - self.x;
var dy = player.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
dx /= distance;
dy /= distance;
}
// Save original position
var startX = self.x;
var startY = self.y;
// Charge animation
tween(self, {
x: self.x + dx * 500,
y: self.y + dy * 500
}, {
duration: 800,
easing: tween.easeIn,
onFinish: function onFinish() {
// Return to original position
tween(self, {
x: startX,
y: startY
}, {
duration: 1000,
easing: tween.easeOut
});
// Create attacks along the charge path
for (var i = 0; i < 5; i++) {
var t = i / 4;
var posX = startX + (self.x - startX) * t;
var posY = startY + (self.y - startY) * t;
self.createAttack(posX, posY, 1500);
}
}
});
};
self.createAttack = function (x, y, duration) {
// Create attack warning
var warning = game.addChild(LK.getAsset('attack', {
anchorX: 0.5,
anchorY: 0.5,
x: x,
y: y,
alpha: 0.3,
tint: 0xFFFF00
}));
// Warning animation
tween(warning, {
alpha: 0.6
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Change to actual attack
warning.tint = 0xFF0000;
tween(warning, {
alpha: 0.8
}, {
duration: 200,
onFinish: function onFinish() {
// Add to active attacks
var attack = {
x: warning.x,
y: warning.y,
radius: warning.width / 2,
visual: warning,
lifeTime: duration
};
self.attacks.push(attack);
// Remove after duration
LK.setTimeout(function () {
var index = self.attacks.indexOf(attack);
if (index !== -1) {
self.attacks.splice(index, 1);
}
// Fade out and destroy
tween(warning, {
alpha: 0
}, {
duration: 300,
onFinish: function onFinish() {
warning.destroy();
}
});
}, duration);
}
});
}
});
};
self.takeDamage = function (amount) {
if (self.dead) {
return;
}
self.health -= amount;
// Visual feedback
LK.effects.flashObject(self, 0xFFFFFF, 200);
// Phase transition at 50% health
if (self.health <= self.maxHealth / 2 && self.phase === 1) {
self.phase = 2;
self.speed += 2;
// Visual phase transition
tween(self, {
tint: 0xFF3300
}, {
duration: 1000,
easing: tween.easeInOut
});
}
// Check if boss is defeated
if (self.health <= 0) {
self.die();
}
};
self.die = function () {
if (self.dead) {
return;
}
self.dead = true;
LK.getSound('victory').play();
// Death animation
tween(self, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 2000,
easing: tween.easeOut,
onFinish: function onFinish() {
self.destroy();
storage.bossesDefeated = (storage.bossesDefeated || 0) + 1;
gameState.victory();
}
});
};
self.update = function () {
if (self.dead) {
return;
}
// Update attack cooldown
if (self.attackCooldown > 0) {
self.attackCooldown--;
if (self.attackCooldown === 0) {
self.startAttackPattern();
}
}
// Move toward player if not stunned
if (!self.stunned) {
var dx = player.x - self.x;
var dy = player.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 200) {
// Keep some distance
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
} else {
// Update stun duration
self.stunDuration--;
if (self.stunDuration <= 0) {
self.stunned = false;
}
}
// Process active attacks
for (var i = self.attacks.length - 1; i >= 0; i--) {
var attack = self.attacks[i];
attack.lifeTime--;
// Check for collision with player
var dx = player.x - attack.x;
var dy = player.y - attack.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < attack.radius + player.width / 2 && player.takeDamage(1)) {
// Visual feedback
LK.effects.flashObject(attack.visual, 0xFFFFFF, 200);
}
// Remove expired attacks
if (attack.lifeTime <= 0) {
self.attacks.splice(i, 1);
attack.visual.destroy();
}
}
};
return self;
});
var Button2 = Container.expand(function (text, onClick) {
var self = Container.call(this);
var bg = self.attachAsset('floor', {
width: 400,
height: 100
});
var label = new Text2(text, {
size: 50,
fill: 0xffffff
});
label.y = -10;
self.addChild(label);
self.interactive = true;
self.on('click', onClick);
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 12;
self.rolling = false;
self.rollCooldown = 0;
self.rollDuration = 0;
self.rollDirection = {
x: 0,
y: 0
};
self.rollDistance = 300;
self.rollSpeed = 20;
self.invulnerable = false;
self.invulnerabilityFrames = 0;
self.health = storage.maxHearts || 3;
self.dead = false;
self.roll = function (direction) {
if (self.rolling || self.rollCooldown > 0 || self.dead) {
return;
}
self.rolling = true;
self.rollDuration = self.rollDistance / self.rollSpeed;
self.rollDirection = direction;
self.invulnerable = true;
// Visual effect for rolling
var rollEffect = game.addChild(LK.getAsset('roll', {
anchorX: 0.5,
anchorY: 0.5,
x: self.x,
y: self.y,
alpha: 0.7
}));
// Start the roll tween
LK.getSound('roll').play();
// Cleanup after roll
LK.setTimeout(function () {
self.rolling = false;
self.rollCooldown = 30; // 30 frames cooldown (0.5 seconds)
LK.setTimeout(function () {
self.invulnerable = false;
}, 100); // Small buffer of invulnerability after roll
tween(rollEffect, {
alpha: 0
}, {
duration: 200,
onFinish: function onFinish() {
rollEffect.destroy();
}
});
}, self.rollDuration * (1000 / 60)); // Convert frames to ms
};
self.takeDamage = function (amount) {
if (self.invulnerable || self.dead) {
return false;
}
self.health -= amount;
LK.getSound('hit').play();
if (self.health <= 0) {
self.die();
return true;
}
// Invulnerability period
self.invulnerable = true;
self.invulnerabilityFrames = 45; // 45 frames (0.75 seconds)
// Flash effect
LK.effects.flashObject(self, 0xFF0000, 500);
return true;
};
self.die = function () {
if (self.dead) {
return;
}
self.dead = true;
LK.getSound('death').play();
// Death visual effect
tween(self, {
alpha: 0,
rotation: Math.PI * 4
}, {
duration: 1500,
easing: tween.easeInOut
});
// Update total deaths
storage.totalDeaths = (storage.totalDeaths || 0) + 1;
// Check if player should get an upgrade
if (storage.totalDeaths % 3 === 0) {
storage.maxHearts = (storage.maxHearts || 3) + 1;
}
// Restart the level after delay
LK.setTimeout(function () {
gameState.gameOver();
}, 2000);
};
self.update = function () {
// Handle roll cooldown
if (self.rollCooldown > 0) {
self.rollCooldown--;
}
// Handle invulnerability frames
if (self.invulnerable && self.invulnerabilityFrames > 0) {
self.invulnerabilityFrames--;
// Blinking effect
self.alpha = self.invulnerabilityFrames % 6 > 2 ? 0.5 : 1;
if (self.invulnerabilityFrames <= 0) {
self.invulnerable = false;
self.alpha = 1;
}
}
// Handle rolling movement
if (self.rolling) {
self.x += self.rollDirection.x * self.rollSpeed;
self.y += self.rollDirection.y * self.rollSpeed;
}
// Keep player within bounds
self.x = Math.max(100, Math.min(self.x, 2048 - 100));
self.y = Math.max(100, Math.min(self.y, 2732 - 100));
};
return self;
});
var UI = Container.expand(function () {
var self = Container.call(this);
// Create heart containers
self.hearts = [];
self.heartContainer = new Container();
self.addChild(self.heartContainer);
// Title and messages
self.titleText = new Text2("ROLL SOULS", {
size: 150,
fill: 0xFFFFFF
});
self.titleText.anchor.set(0.5, 0.5);
self.addChild(self.titleText);
self.messageText = new Text2("", {
size: 60,
fill: 0xFFFFFF
});
self.messageText.anchor.set(0.5, 0.5);
self.addChild(self.messageText);
// Deaths counter
self.deathsText = new Text2("Deaths: 0", {
size: 40,
fill: 0xFFFFFF
});
self.deathsText.anchor.set(1, 0);
self.addChild(self.deathsText);
// Tutorial text
self.tutorialText = new Text2("", {
size: 50,
fill: 0xFFFFFF
});
self.tutorialText.anchor.set(0.5, 0);
self.addChild(self.tutorialText);
self.updateHearts = function (current, max) {
// Clear existing hearts
while (self.hearts.length > 0) {
var heart = self.hearts.pop();
heart.destroy();
}
self.heartContainer.removeChildren();
// Create new hearts
for (var i = 0; i < max; i++) {
var heart = LK.getAsset('heart', {
anchorX: 0.5,
anchorY: 0.5,
x: i * 50,
y: 0,
tint: i < current ? 0xFF0000 : 0x555555
});
self.hearts.push(heart);
self.heartContainer.addChild(heart);
}
// Center heart container
self.heartContainer.x = (2048 - max * 50) / 2;
self.heartContainer.y = 100;
};
self.showMessage = function (message, duration) {
self.messageText.setText(message);
self.messageText.alpha = 1;
// Clear any existing timeout
if (self.messageTimeout) {
LK.clearTimeout(self.messageTimeout);
}
// Fade out after duration
if (duration) {
self.messageTimeout = LK.setTimeout(function () {
tween(self.messageText, {
alpha: 0
}, {
duration: 500
});
}, duration);
}
};
self.showTutorial = function (text) {
self.tutorialText.setText(text);
self.tutorialText.alpha = 1;
};
self.hideTutorial = function () {
tween(self.tutorialText, {
alpha: 0
}, {
duration: 500
});
};
self.updateDeathsCounter = function () {
self.deathsText.setText("Deaths: " + storage.totalDeaths);
};
self.positionElements = function (state) {
// Position based on game state
switch (state) {
case "title":
self.titleText.x = 2048 / 2;
self.titleText.y = 800;
self.messageText.x = 2048 / 2;
self.messageText.y = 1000;
self.tutorialText.x = 2048 / 2;
self.tutorialText.y = 1200;
self.deathsText.x = 2048 - 50;
self.deathsText.y = 50;
break;
case "game":
self.titleText.alpha = 0;
self.messageText.x = 2048 / 2;
self.messageText.y = 1500;
self.tutorialText.x = 2048 / 2;
self.tutorialText.y = 200;
self.deathsText.x = 2048 - 50;
self.deathsText.y = 50;
break;
case "victory":
self.titleText.x = 2048 / 2;
self.titleText.y = 800;
self.messageText.x = 2048 / 2;
self.messageText.y = 1000;
self.tutorialText.x = 2048 / 2;
self.tutorialText.y = 1200;
self.deathsText.x = 2048 - 50;
self.deathsText.y = 50;
break;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x111111
});
/****
* Game Code
****/
// === Dodane funkcje ===
// Game variables
function clearScene() {
while (game.children.length > 0) {
game.removeChild(game.children[0]);
}
}
var gameState = "menu";
var deathCount = 0;
var maxHearts = 5;
var currentHearts = 5;
var gameTimer = 120;
var timerText;
var boss, player;
function showMainMenu() {
clearScene();
var title = new Text2("ROLL SOULS", {
size: 120,
fill: 0xffffff
});
title.x = 1024;
title.y = 400;
game.addChild(title);
var startButton = new Button2("Start Game", function () {
showIntro();
});
startButton.x = 1024;
startButton.y = 800;
game.addChild(startButton);
}
function showIntro() {
clearScene();
var introText = new Text2("Only those who roll shall survive...", {
size: 60,
fill: 0xffffff
});
introText.x = 1024;
introText.y = 600;
game.addChild(introText);
var continueButton = new Button2("Continue", function () {
showFakeTutorial();
});
continueButton.x = 1024;
continueButton.y = 1000;
game.addChild(continueButton);
}
function showFakeTutorial() {
clearScene();
var fakeText = new Text2("Press the button to roll!", {
size: 60,
fill: 0xff0000
});
fakeText.x = 1024;
fakeText.y = 600;
game.addChild(fakeText);
var rollButton = new Button2("Roll", function () {
showRealTutorial();
});
rollButton.x = 1024;
rollButton.y = 1000;
game.addChild(rollButton);
}
function showRealTutorial() {
clearScene();
var realText = new Text2("Swipe to roll and survive!", {
size: 60,
fill: 0xffffff
});
realText.x = 1024;
realText.y = 600;
game.addChild(realText);
var startButton = new Button2("Start Boss Fight", function () {
startGame();
});
startButton.x = 1024;
startButton.y = 1000;
game.addChild(startButton);
}
function startGame() {
clearScene();
initGame();
timerText = new Text2("Time Left: 120", {
size: 50,
fill: 0xffffff
});
timerText.x = 50;
timerText.y = 50;
game.addChild(timerText);
LK.setInterval(function () {
if (gameState === "bossFight") {
gameTimer--;
timerText.setText("Time Left: " + gameTimer);
if (gameTimer <= 0) {
victory();
}
}
}, 1000);
}
function initGame() {
gameState = "bossFight";
player = new Player();
player.x = 1024;
player.y = 2048;
game.addChild(player);
boss = new Boss();
boss.x = 1024;
boss.y = 400;
game.addChild(boss);
currentHearts = 5 + Math.min(Math.floor(deathCount / 5), 5);
updateHeartUI();
}
function gameOver() {
deathCount++;
showMainMenu();
}
function victory() {
clearScene();
var victoryText = new Text2("Victory!", {
size: 100,
fill: 0x00ff00
});
victoryText.x = 1024;
victoryText.y = 700;
game.addChild(victoryText);
var restartButton = new Button2("Restart", function () {
showMainMenu();
});
restartButton.x = 1024;
restartButton.y = 1000;
game.addChild(restartButton);
}
function updateHeartUI() {
// Update heart display if needed
}
showMainMenu();
var player;
var boss;
var ui;
var walls = [];
var gameState = {
currentState: "title",
touchStart: {
x: 0,
y: 0
},
touchEnd: {
x: 0,
y: 0
},
init: function init() {
// Create background
var bg = game.addChild(LK.getAsset('bg', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
}));
// Create walls
this.createWalls();
// Create UI
ui = game.addChild(new UI());
ui.positionElements("title");
ui.updateDeathsCounter();
// Show title screen
this.showTitleScreen();
// Start background music
LK.playMusic('bgMusic', {
fade: {
start: 0,
end: 0.3,
duration: 1000
}
});
},
createWalls: function createWalls() {
// Left wall
var leftWall = game.addChild(LK.getAsset('wall', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
}));
walls.push(leftWall);
// Right wall
var rightWall = game.addChild(LK.getAsset('wall', {
anchorX: 0,
anchorY: 0,
x: 2048 - 100,
y: 0
}));
walls.push(rightWall);
// Top wall
var topWall = game.addChild(LK.getAsset('floor', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
}));
walls.push(topWall);
// Bottom wall
var bottomWall = game.addChild(LK.getAsset('floor', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 2732 - 100
}));
walls.push(bottomWall);
},
showTitleScreen: function showTitleScreen() {
this.currentState = "title";
ui.positionElements("title");
ui.titleText.alpha = 1;
ui.showMessage("Tap to Start", 0);
ui.showTutorial("Swipe to Roll - Death is Progress");
},
startGame: function startGame() {
this.currentState = "game";
ui.positionElements("game");
// Create player
player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 / 2 + 400;
player.health = storage.maxHearts || 3;
// Create boss
boss = game.addChild(new Boss());
boss.x = 2048 / 2;
boss.y = 2732 / 2 - 400;
// Update UI
ui.updateHearts(player.health, storage.maxHearts);
ui.showTutorial("Swipe to roll away from attacks!");
LK.setTimeout(function () {
ui.hideTutorial();
boss.startAttackPattern();
}, 3000);
},
gameOver: function gameOver() {
// Show game over message
ui.showMessage("YOU DIED", 3000);
// Restart after delay
LK.setTimeout(function () {
// Clean up
if (player) {
player.destroy();
}
if (boss) {
boss.destroy();
}
// Restart
gameState.startGame();
}, 3000);
},
victory: function victory() {
this.currentState = "victory";
ui.positionElements("victory");
ui.titleText.setText("VICTORY ACHIEVED");
ui.titleText.alpha = 1;
ui.showMessage("Bosses Defeated: " + storage.bossesDefeated, 0);
ui.showTutorial("Tap to Continue");
// Clean up player
if (player) {
player.destroy();
}
LK.setTimeout(function () {
// Return to title after delay
LK.setTimeout(function () {
gameState.showTitleScreen();
}, 5000);
}, 3000);
},
processTouchGesture: function processTouchGesture() {
if (this.currentState === "title") {
this.startGame();
return;
}
if (this.currentState === "victory") {
this.showTitleScreen();
return;
}
// Only process roll gestures during gameplay
if (this.currentState !== "game" || !player || player.dead) {
return;
}
// Calculate swipe direction and distance
var dx = this.touchEnd.x - this.touchStart.x;
var dy = this.touchEnd.y - this.touchStart.y;
var distance = Math.sqrt(dx * dx + dy * dy);
// Minimum swipe distance
if (distance < 50) {
return;
}
// Normalize direction
var direction = {
x: dx / distance,
y: dy / distance
};
// Execute roll
player.roll(direction);
}
};
// Event handlers
game.down = function (x, y, obj) {
gameState.touchStart.x = x;
gameState.touchStart.y = y;
};
game.up = function (x, y, obj) {
gameState.touchEnd.x = x;
gameState.touchEnd.y = y;
gameState.processTouchGesture();
};
game.move = function (x, y, obj) {
// Only used for tracking the current touch position
gameState.touchEnd.x = x;
gameState.touchEnd.y = y;
};
// Main update loop
game.update = function () {
// Only update game objects during gameplay
if (gameState.currentState === "game") {
if (player) {
player.update();
}
if (boss) {
boss.update();
}
// Update hearts UI
if (player && ui) {
ui.updateHearts(player.health, storage.maxHearts);
}
}
// Always update deaths counter
if (ui) {
ui.updateDeathsCounter();
}
};
// Initialize the game
gameState.init(); ===================================================================
--- original.js
+++ change.js
@@ -266,38 +266,22 @@
}
};
return self;
});
-var Button2 = Container.expand(function () {
+var Button2 = Container.expand(function (text, onClick) {
var self = Container.call(this);
- self.bg = self.attachAsset('bg', {
- anchorX: 0.5,
- anchorY: 0.5,
- width: 300,
- height: 100,
- tint: 0x444444
+ var bg = self.attachAsset('floor', {
+ width: 400,
+ height: 100
});
- self.text = new Text2("", {
+ var label = new Text2(text, {
size: 50,
- fill: 0xFFFFFF
+ fill: 0xffffff
});
- self.text.anchor.set(0.5, 0.5);
- self.addChild(self.text);
- self.callback = function () {};
- self.setLabel = function (label) {
- self.text.setText(label);
- };
- self.down = function (x, y, obj) {
- self.bg.tint = 0x666666;
- };
- self.up = function (x, y, obj) {
- self.bg.tint = 0x444444;
- self.callback();
- };
- self.init = function (label, callback) {
- self.setLabel(label);
- self.callback = callback || function () {};
- };
+ label.y = -10;
+ self.addChild(label);
+ self.interactive = true;
+ self.on('click', onClick);
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
@@ -556,32 +540,22 @@
/****
* Game Code
****/
+// === Dodane funkcje ===
// Game variables
-Button2.create = function (label, callback) {
- var button = new Button2();
- button.init(label, callback);
- return button;
-};
+function clearScene() {
+ while (game.children.length > 0) {
+ game.removeChild(game.children[0]);
+ }
+}
var gameState = "menu";
var deathCount = 0;
var maxHearts = 5;
var currentHearts = 5;
var gameTimer = 120;
var timerText;
var boss, player;
-// Helper function to clear the scene
-function clearScene() {
- // Remove all children except permanent elements
- var childrenToRemove = [];
- for (var i = 0; i < game.children.length; i++) {
- childrenToRemove.push(game.children[i]);
- }
- for (var i = 0; i < childrenToRemove.length; i++) {
- childrenToRemove[i].destroy();
- }
-}
function showMainMenu() {
clearScene();
var title = new Text2("ROLL SOULS", {
size: 120,