User prompt
5 pixel kısa kenarlarını uzat
User prompt
food water health mood sleep barlarını 5 pixel genişlet
User prompt
40 pixel daha kaydır, ayrıca saati gösteren yazıyı da 10 pixel aşağı kaydır
User prompt
40 pixel daha aşağı kaydır
User prompt
40 pixel daha aşağı kaydır
User prompt
food water helth mood sleep barlarını 40 pixel aşağı kaydır ve 5 pixel genişlet içindeki yazılarda dahil
User prompt
can barlarını saatin 20 pixel altına koy
User prompt
saat çubukları doğru göstermiyor fixle
User prompt
gün 0 dan başlat oyunu ve saat 12:00am de başlasın
User prompt
saati 15 pixel sağa kaydır
User prompt
15 pixel aşağıya kaydır
User prompt
saati ve saatin gözüktüğü yazıyı biraz büyüt
User prompt
saati ekranın en üstüne koy günü belirten yazıyla yan yana olsun
User prompt
ekrana saat göstergesi ekle ve gün ışığı da bu saat göstergesine entegre olarak çalışsın
User prompt
food water health mood sleep barları her saniye azar azar alacak mekanikte olsun ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
sağlık açlık gibi barları arkaplanın önüne koy
User prompt
müzik menüsü içerisinde 5 adet müzik seçeneği olsun fakat müzik 1 hariç diğerleri kilitli olarak gözüksün ve level 2 olmadan müzik 2 açılmasın ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
eat drink ve sleep butonlarını kaldır
User prompt
parayla level atlama butonu ekle ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
add @upit/storage.v1 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
music menu içerisindeki assetleri music olarak değil sound olarak assetle
User prompt
müzik çalarken eat drink sleep ve ya next day butonlarına basarsam müzik durur
User prompt
music çaldığında para kazandır ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
o şekilde değil music 1 music 2 music 3 yap ve her birine farklı music asseti ekle
User prompt
music menu içeriğindekileri assetleştir farklı şeyler çalabileyim
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var ActionButton = Container.expand(function (text, action, assetType) {
var self = Container.call(this);
var buttonAsset = assetType || 'performButton';
var button = self.attachAsset(buttonAsset, {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(text, {
size: 48,
fill: 0x000000,
font: "'Arial Black','Arial',sans-serif"
});
buttonText.anchor.set(0.5, 1);
buttonText.x = 0;
buttonText.y = -50;
self.addChild(buttonText);
self.action = action;
self.down = function (x, y, obj) {
if (self.action) {
self.action();
}
};
return self;
});
var CollapsibleWindow = Container.expand(function () {
var self = Container.call(this);
// Create window background
var windowBg = self.attachAsset('tabBackground', {
anchorX: 1,
anchorY: 0.5
});
// Create handle for toggle - positioned at screen edge
var handle = self.attachAsset('tabHandle', {
anchorX: 1,
anchorY: 0.5,
x: 0,
y: 0
});
// Add handle text
var handleText = new Text2('NAV', {
size: 20,
fill: 0xFFFFFF,
font: "'Arial Black','Arial',sans-serif"
});
handleText.anchor.set(0.5, 0.5);
handleText.x = -15;
handleText.y = 0;
handle.addChild(handleText);
self.isOpen = false;
self.buttons = [];
// Toggle window open/closed
self.toggle = function () {
self.isOpen = !self.isOpen;
var targetX = self.isOpen ? 0 : windowBg.width;
var handleTargetX = self.isOpen ? -windowBg.width + 125 : 0;
tween(windowBg, {
x: targetX
}, {
duration: 500,
easing: tween.easeInOut
});
tween(handle, {
x: handleTargetX
}, {
duration: 500,
easing: tween.easeInOut
});
// Update button visibility
for (var i = 0; i < self.buttons.length; i++) {
self.buttons[i].visible = self.isOpen;
}
};
// Add navigation button to window
self.addNavButton = function (text, targetLocation, assetType, yOffset) {
var button = new NavigationButton(text, targetLocation, assetType);
button.x = -200;
button.y = yOffset;
button.scaleX = 1.3;
button.scaleY = 1.3;
button.visible = false;
windowBg.addChild(button);
self.buttons.push(button);
return button;
};
// Handle click on handle
handle.down = function (x, y, obj) {
self.toggle();
};
// Initially closed - position completely off-screen
windowBg.x = windowBg.width;
return self;
});
var Location = Container.expand(function (type, name, earningMultiplier, cost) {
var self = Container.call(this);
self.type = type;
self.name = name;
self.earningMultiplier = earningMultiplier;
self.cost = cost;
self.unlocked = type === 'street';
var locationGraphics = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 0.5
});
var nameText = new Text2(name, {
size: 24,
fill: 0xFFFFFF
});
nameText.anchor.set(0.5, 0);
nameText.x = 0;
nameText.y = locationGraphics.height / 2 + 10;
self.addChild(nameText);
self.down = function (x, y, obj) {
if (self.unlocked) {
selectLocation(self);
}
};
return self;
});
var Musician = Container.expand(function () {
var self = Container.call(this);
// Add lower body/pelvis below upper body - created first to be behind upper body
var lowerBody = self.attachAsset('musicianLowerBody', {
anchorX: 0.5,
anchorY: 0,
x: 0,
y: 55,
rotation: -0.175 // 10 degrees left rotation in radians
});
// Main upper body - centered as the base - created after lower body to be in front
var upperBody = self.attachAsset('musicianUpperBody', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: -50
});
// Add head positioned above upper body
var head = self.attachAsset('musicianHead', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: -180
});
// Add left arm positioned at shoulder level
self.leftArm = self.attachAsset('musicianLeftArm', {
anchorX: 0.5,
anchorY: 0,
x: -110,
y: -135
});
// Add right arm positioned at shoulder level
self.rightArm = self.attachAsset('musicianRightArm', {
anchorX: 0.5,
anchorY: 0,
x: 110,
y: -135
});
// Add left calf attached directly to lower body
var leftCalf = lowerBody.attachAsset('musicianCalf', {
anchorX: 0.5,
anchorY: 0,
x: 47.5,
y: 70,
rotation: 0.8
// Angled downward for sitting position
});
// Add left foot attached to calf at ankle
var leftFoot = leftCalf.attachAsset('musicianFoot', {
anchorX: 0.5,
anchorY: 0,
x: 115,
y: 95,
rotation: 1.2
// Angled for natural foot position
});
// Add right calf attached directly to lower body
var rightCalf = lowerBody.attachAsset('musicianCalf', {
anchorX: 0.5,
anchorY: 0,
x: -27.5,
y: 70,
rotation: 0.8
// Angled downward for sitting position
});
// Add right foot attached to calf at ankle
var rightFoot = rightCalf.attachAsset('musicianFoot', {
anchorX: 0.5,
anchorY: 0,
x: 105,
y: 95,
rotation: 1.2
// Angled for natural foot position
});
// Add left hand positioned at the end of left arm
self.leftHand = self.leftArm.attachAsset('leftHand', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 200
});
// Add right hand positioned at the end of right arm
self.rightHand = self.rightArm.attachAsset('rightHand', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 210
});
// Position guitar next to bench, leaning against it
var guitar = self.attachAsset('guitar', {
anchorX: 0.5,
anchorY: 1,
x: 200,
y: 150
});
self.perform = function () {
// First, animate reaching for the guitar
tween(self.rightArm, {
rotation: 0.8,
x: 150
}, {
duration: 800,
onFinish: function onFinish() {
// Move guitar to musician's hands
tween(guitar, {
x: 0,
y: 0
}, {
duration: 400,
onFinish: function onFinish() {
// Remove guitar from its current parent and attach to left hand
guitar.parent.removeChild(guitar);
self.leftHand.addChild(guitar);
// Position guitar at 45-degree angle in left hand, below head level
guitar.x = -20;
guitar.y = 20; // Moved down to be below head level
guitar.rotation = -0.785; // -45 degrees in radians
// Play for 10 seconds with continuous strumming
var strumCount = 0;
var maxStrums = 25; // About 10 seconds of strumming
function playStrum() {
if (strumCount < maxStrums) {
// Animate guitar
tween(guitar, {
rotation: 0.2
}, {
duration: 200,
onFinish: function onFinish() {
tween(guitar, {
rotation: -0.2
}, {
duration: 200,
onFinish: function onFinish() {
tween(guitar, {
rotation: 0
}, {
duration: 200,
onFinish: function onFinish() {
strumCount++;
if (strumCount < maxStrums) {
LK.setTimeout(playStrum, 100);
} else {
// Stop guitar music
// Sounds stop automatically, no need to stop manually
// Return guitar to original position
tween(guitar, {
x: 200,
y: 150
}, {
duration: 800
});
// Return arms to normal position
tween(self.rightArm, {
rotation: 0,
x: 110
}, {
duration: 500
});
tween(self.leftArm, {
rotation: 0
}, {
duration: 500
});
}
}
});
}
});
}
});
// Animate right arm (strumming)
tween(self.rightArm, {
rotation: 0.3
}, {
duration: 200,
onFinish: function onFinish() {
tween(self.rightArm, {
rotation: -0.3
}, {
duration: 200,
onFinish: function onFinish() {
tween(self.rightArm, {
rotation: 0.8
}, {
duration: 200
});
}
});
}
});
// Animate left arm slightly
tween(self.leftArm, {
rotation: -0.1
}, {
duration: 600,
onFinish: function onFinish() {
tween(self.leftArm, {
rotation: 0
}, {
duration: 200
});
}
});
// Animate hands
tween(self.leftHand, {
rotation: 0.15,
x: -5
}, {
duration: 600,
onFinish: function onFinish() {
tween(self.leftHand, {
rotation: 0,
x: 0
}, {
duration: 200
});
}
});
tween(self.rightHand, {
rotation: 0.2,
x: 5
}, {
duration: 200,
onFinish: function onFinish() {
tween(self.rightHand, {
rotation: -0.2,
x: -5
}, {
duration: 200,
onFinish: function onFinish() {
tween(self.rightHand, {
rotation: 0,
x: 0
}, {
duration: 200
});
}
});
}
});
LK.getSound('music1').play();
}
}
// Start the strumming sequence
playStrum();
}
});
}
});
// Also animate left arm to help reach
tween(self.leftArm, {
rotation: 0.3,
x: -80
}, {
duration: 800
});
};
self.performWithMusic = function (musicId) {
// First, animate reaching for the guitar
tween(self.rightArm, {
rotation: 0.8,
x: 150
}, {
duration: 800,
onFinish: function onFinish() {
// Move guitar to musician's hands
tween(guitar, {
x: 0,
y: 0
}, {
duration: 400,
onFinish: function onFinish() {
// Remove guitar from its current parent and attach to left hand
guitar.parent.removeChild(guitar);
self.leftHand.addChild(guitar);
// Position guitar at 45-degree angle in left hand, below head level
guitar.x = -20;
guitar.y = 20; // Moved down to be below head level
guitar.rotation = -0.785; // -45 degrees in radians
// Play for 10 seconds with continuous strumming
var strumCount = 0;
var maxStrums = 25; // About 10 seconds of strumming
function playStrum() {
if (strumCount < maxStrums) {
// Animate guitar
tween(guitar, {
rotation: 0.2
}, {
duration: 200,
onFinish: function onFinish() {
tween(guitar, {
rotation: -0.2
}, {
duration: 200,
onFinish: function onFinish() {
tween(guitar, {
rotation: 0
}, {
duration: 200,
onFinish: function onFinish() {
strumCount++;
if (strumCount < maxStrums) {
LK.setTimeout(playStrum, 100);
} else {
// Stop music
// Sounds stop automatically, no need to stop manually
// Return guitar to original position
tween(guitar, {
x: 200,
y: 150
}, {
duration: 800
});
// Return arms to normal position
tween(self.rightArm, {
rotation: 0,
x: 110
}, {
duration: 500
});
tween(self.leftArm, {
rotation: 0
}, {
duration: 500
});
}
}
});
}
});
}
});
// Animate right arm (strumming)
tween(self.rightArm, {
rotation: 0.3
}, {
duration: 200,
onFinish: function onFinish() {
tween(self.rightArm, {
rotation: -0.3
}, {
duration: 200,
onFinish: function onFinish() {
tween(self.rightArm, {
rotation: 0.8
}, {
duration: 200
});
}
});
}
});
// Animate left arm slightly
tween(self.leftArm, {
rotation: -0.1
}, {
duration: 600,
onFinish: function onFinish() {
tween(self.leftArm, {
rotation: 0
}, {
duration: 200
});
}
});
// Animate hands
tween(self.leftHand, {
rotation: 0.15,
x: -5
}, {
duration: 600,
onFinish: function onFinish() {
tween(self.leftHand, {
rotation: 0,
x: 0
}, {
duration: 200
});
}
});
tween(self.rightHand, {
rotation: 0.2,
x: 5
}, {
duration: 200,
onFinish: function onFinish() {
tween(self.rightHand, {
rotation: -0.2,
x: -5
}, {
duration: 200,
onFinish: function onFinish() {
tween(self.rightHand, {
rotation: 0,
x: 0
}, {
duration: 200
});
}
});
}
});
LK.getSound(musicId).play();
}
}
// Start the strumming sequence
playStrum();
}
});
}
});
// Also animate left arm to help reach
tween(self.leftArm, {
rotation: 0.3,
x: -80
}, {
duration: 800
});
};
return self;
});
var NavigationButton = Container.expand(function (text, targetLocation, assetType) {
var self = Container.call(this);
var button = self.attachAsset(assetType, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.6,
scaleY: 0.6
});
var buttonText = new Text2(text, {
size: 24,
fill: 0xFFFFFF,
font: "'Arial Black','Arial',sans-serif"
});
buttonText.anchor.set(0.5, 0.5);
buttonText.x = 0;
buttonText.y = 0;
self.addChild(buttonText);
self.targetLocation = targetLocation;
self.down = function (x, y, obj) {
navigateToLocation(self.targetLocation);
};
return self;
});
var ResourceBar = Container.expand(function (label, color, maxValue) {
var self = Container.call(this);
self.maxValue = maxValue;
self.currentValue = maxValue;
var bg = self.attachAsset('resourceBg', {
anchorX: 0,
anchorY: 0
});
var bar = self.attachAsset('resourceBar', {
anchorX: 0,
anchorY: 0,
x: 2,
y: 2
});
bar.tint = color;
self.bar = bar;
// Add percentage text centered in the bar
var valueText = new Text2('100%', {
size: 24,
fill: 0x000000,
font: "'Arial Black','Arial',sans-serif"
});
valueText.anchor.set(0.5, 0.5);
valueText.x = 152;
valueText.y = 17;
self.addChild(valueText);
self.valueText = valueText;
self.updateBar = function () {
var percentage = Math.max(0, self.currentValue / self.maxValue);
self.bar.width = 300 * percentage;
self.valueText.setText(Math.round(percentage * 100) + '%');
if (percentage < 0.3) {
self.bar.tint = 0xFF0000;
} else if (percentage < 0.6) {
self.bar.tint = 0xFFFF00;
} else {
self.bar.tint = color;
}
};
self.setValue = function (value) {
self.currentValue = Math.max(0, Math.min(self.maxValue, value));
self.updateBar();
};
self.addValue = function (amount) {
self.setValue(self.currentValue + amount);
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game state variables
var currentDay = storage.currentDay || 1;
var money = storage.money || 10;
var followers = storage.followers || 0;
var concerts = storage.concerts || 0;
var musicSkill = storage.musicSkill || 10;
var equipmentLevel = storage.equipmentLevel || 1;
var socialMediaUnlocked = storage.socialMediaUnlocked || false;
var playerLevel = storage.playerLevel || 1;
// Clock variables
var currentHour = 6; // Start at 6 AM
var currentMinute = 0;
var timeSpeed = 1; // How fast time moves (1 = normal speed)
var dayLightLevel = 0.5; // Controls background brightness based on time
// Resources
var foodLevel = 100;
var waterLevel = 100;
var healthLevel = 100;
var moodLevel = 80;
var sleepLevel = 80;
// Game state
var currentLocation = null;
var gamePhase = 'playing'; // 'playing', 'gameOver', 'won'
var resourceDrainTimer = 0;
// UI Elements
var dayText = new Text2('Day 1', {
size: 40,
fill: 0x000000
});
dayText.anchor.set(0.5, 0);
LK.gui.top.addChild(dayText);
var moneyText = new Text2('$10', {
size: 30,
fill: 0x000000
});
moneyText.anchor.set(1, 0);
moneyText.x = -20;
moneyText.y = 60;
LK.gui.topRight.addChild(moneyText);
var followersText = new Text2('Followers: 0', {
size: 25,
fill: 0x000000
});
followersText.anchor.set(0, 0);
followersText.x = 20;
followersText.y = 60;
LK.gui.topLeft.addChild(followersText);
// Create clock display
var clockContainer = LK.gui.topLeft.addChild(new Container());
clockContainer.x = 20;
clockContainer.y = 120;
// Clock face
var clockFace = clockContainer.addChild(LK.getAsset('clockFace', {
anchorX: 0.5,
anchorY: 0.5,
x: 60,
y: 60
}));
// Hour hand
var hourHand = clockContainer.addChild(LK.getAsset('clockHour', {
anchorX: 0.5,
anchorY: 1,
x: 60,
y: 60
}));
// Minute hand
var minuteHand = clockContainer.addChild(LK.getAsset('clockMinute', {
anchorX: 0.5,
anchorY: 1,
x: 60,
y: 60
}));
// Clock center dot
var clockCenter = clockContainer.addChild(LK.getAsset('clockCenter', {
anchorX: 0.5,
anchorY: 0.5,
x: 60,
y: 60
}));
// Time text display
var timeText = new Text2('6:00 AM', {
size: 20,
fill: 0x000000,
font: "'Arial Black','Arial',sans-serif"
});
timeText.anchor.set(0.5, 0);
timeText.x = 60;
timeText.y = 130;
clockContainer.addChild(timeText);
// Create cobblestone background
var cobblestoneBackground = game.addChild(LK.getAsset('cobblestone', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
}));
// Create floor behind lamp and musician
var floor = game.addChild(LK.getAsset('floor', {
anchorX: 0,
anchorY: 1,
x: 0,
y: 2832 - 150
}));
// Create resource bars arranged side by side
var barStartX = 200;
var barSpacing = 320;
var barY = 150;
var foodBar = new ResourceBar('', 0x32CD32, 100);
foodBar.x = barStartX;
foodBar.y = barY;
game.addChild(foodBar);
var waterBar = new ResourceBar('', 0x1E90FF, 100);
waterBar.x = barStartX + barSpacing;
waterBar.y = barY;
game.addChild(waterBar);
var healthBar = new ResourceBar('', 0xFF6347, 100);
healthBar.x = barStartX + barSpacing * 2;
healthBar.y = barY;
game.addChild(healthBar);
var moodBar = new ResourceBar('', 0xFFD700, 100);
moodBar.x = barStartX + barSpacing * 3;
moodBar.y = barY;
game.addChild(moodBar);
var sleepBar = new ResourceBar('', 0x9370DB, 100);
sleepBar.x = barStartX + barSpacing * 4;
sleepBar.y = barY;
game.addChild(sleepBar);
// Add labels below the bars
var foodLabel = new Text2('Food', {
size: 32,
fill: 0x000000,
font: "'Arial Black','Arial',sans-serif"
});
foodLabel.anchor.set(0.5, 0);
foodLabel.x = barStartX + 152;
foodLabel.y = barY + 50;
game.addChild(foodLabel);
var waterLabel = new Text2('Water', {
size: 32,
fill: 0x000000,
font: "'Arial Black','Arial',sans-serif"
});
waterLabel.anchor.set(0.5, 0);
waterLabel.x = barStartX + barSpacing + 152;
waterLabel.y = barY + 50;
game.addChild(waterLabel);
var healthLabel = new Text2('Health', {
size: 32,
fill: 0x000000,
font: "'Arial Black','Arial',sans-serif"
});
healthLabel.anchor.set(0.5, 0);
healthLabel.x = barStartX + barSpacing * 2 + 152;
healthLabel.y = barY + 50;
game.addChild(healthLabel);
var moodLabel = new Text2('Mood', {
size: 32,
fill: 0x000000,
font: "'Arial Black','Arial',sans-serif"
});
moodLabel.anchor.set(0.5, 0);
moodLabel.x = barStartX + barSpacing * 3 + 152;
moodLabel.y = barY + 50;
game.addChild(moodLabel);
var sleepLabel = new Text2('Sleep', {
size: 32,
fill: 0x000000,
font: "'Arial Black','Arial',sans-serif"
});
sleepLabel.anchor.set(0.5, 0);
sleepLabel.x = barStartX + barSpacing * 4 + 152;
sleepLabel.y = barY + 50;
game.addChild(sleepLabel);
// Create location reference for current gameplay
var streetCorner = new Location('streetCorner', 'Street Corner', 1.0, 0);
// Create sitting bench at musician's current position
var sittingBench = game.addChild(LK.getAsset('sittingBench', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2170
}));
// Create musician
var musician = new Musician();
musician.x = 1024; // Center horizontally (2048/2)
musician.y = 2070; // Position musician to sit properly on the bench
game.addChild(musician);
// Scale musician to 1.15x
tween(musician, {
scaleX: 1.15,
scaleY: 1.15
}, {
duration: 500,
easing: tween.easeOut
});
// Music selection state
var musicListOpen = false;
var musicOptions = [{
name: 'Music 1',
cost: 5,
sound: 'music1',
requiredLevel: 1,
locked: false
}, {
name: 'Music 2',
cost: 8,
sound: 'music2',
requiredLevel: 2,
locked: true
}, {
name: 'Music 3',
cost: 10,
sound: 'music3',
requiredLevel: 3,
locked: true
}, {
name: 'Music 4',
cost: 12,
sound: 'music4',
requiredLevel: 4,
locked: true
}, {
name: 'Music 5',
cost: 15,
sound: 'music5',
requiredLevel: 5,
locked: true
}];
var musicButtons = [];
// Create action buttons
var performButton = new ActionButton('Music Menu', function () {
toggleMusicList();
});
performButton.x = 250;
performButton.y = 800;
game.addChild(performButton);
// Create music selection buttons (initially hidden)
for (var i = 0; i < musicOptions.length; i++) {
var buttonText = musicOptions[i].locked ? musicOptions[i].name + ' (LOCKED)' : musicOptions[i].name + ' ($' + musicOptions[i].cost + ')';
var musicButton = new ActionButton(buttonText, createMusicAction(i));
musicButton.x = 250;
musicButton.y = 900 + i * 100;
musicButton.visible = false;
// Visual indication for locked music
if (musicOptions[i].locked) {
musicButton.alpha = 0.5;
}
musicButtons.push(musicButton);
game.addChild(musicButton);
}
function createMusicAction(index) {
return function () {
if (musicOptions[index].locked) {
// Show locked message
var lockedText = new Text2('Reach Level ' + musicOptions[index].requiredLevel + ' to unlock!', {
size: 30,
fill: 0xFF0000
});
lockedText.anchor.set(0.5, 0.5);
lockedText.x = 1024;
lockedText.y = 1200;
game.addChild(lockedText);
tween(lockedText, {
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
lockedText.destroy();
}
});
return;
}
if (currentLocation && money >= musicOptions[index].cost) {
performMusic(musicOptions[index]);
toggleMusicList(); // Close the list after selection
}
};
}
function toggleMusicList() {
musicListOpen = !musicListOpen;
// Animate music buttons visibility
for (var i = 0; i < musicButtons.length; i++) {
if (musicListOpen) {
musicButtons[i].visible = true;
musicButtons[i].alpha = 0;
tween(musicButtons[i], {
alpha: 1,
y: 900 + i * 100
}, {
duration: 300,
easing: tween.easeOut
});
} else {
tween(musicButtons[i], {
alpha: 0,
y: 800
}, {
duration: 300,
easing: tween.easeIn,
onFinish: function onFinish() {
for (var j = 0; j < musicButtons.length; j++) {
musicButtons[j].visible = false;
}
}
});
}
}
}
var levelUpButton = new ActionButton('Level Up ($50)', function () {
if (money >= 50) {
money -= 50;
equipmentLevel++;
musicSkill += 10;
playerLevel++;
// Unlock music tracks based on level
for (var i = 0; i < musicOptions.length; i++) {
if (playerLevel >= musicOptions[i].requiredLevel) {
musicOptions[i].locked = false;
}
}
// Update music button text and appearance
for (var i = 0; i < musicButtons.length; i++) {
var buttonText = musicOptions[i].locked ? musicOptions[i].name + ' (LOCKED)' : musicOptions[i].name + ' ($' + musicOptions[i].cost + ')';
var musicButtonText = musicButtons[i].children[1];
musicButtonText.setText(buttonText);
musicButtons[i].alpha = musicOptions[i].locked ? 0.5 : 1;
}
// Save to storage for persistence
storage.money = money;
storage.equipmentLevel = equipmentLevel;
storage.musicSkill = musicSkill;
storage.playerLevel = playerLevel;
// Update button text to show new cost
var buttonText = levelUpButton.children[1];
buttonText.setText('Level Up ($' + (50 + equipmentLevel * 25) + ')');
// Show level up effect
showEarnings(0); // Reuse the earnings animation system
var levelUpText = new Text2('LEVEL UP!', {
size: 40,
fill: 0xFF0000
});
levelUpText.anchor.set(0.5, 0.5);
levelUpText.x = musician.x;
levelUpText.y = musician.y - 200;
game.addChild(levelUpText);
tween(levelUpText, {
y: levelUpText.y - 50,
alpha: 0
}, {
duration: 1500,
onFinish: function onFinish() {
levelUpText.destroy();
}
});
updateDisplay();
}
});
levelUpButton.x = 1450;
levelUpButton.y = 700;
game.addChild(levelUpButton);
var nextDayButton = new ActionButton('Next Day', function () {
// Sounds stop automatically, no need to stop manually
nextDay();
});
nextDayButton.x = 1450;
nextDayButton.y = 800;
game.addChild(nextDayButton);
// Set initial location
currentLocation = streetCorner;
selectLocation(streetCorner);
// Create street lamp
var streetLamp = game.addChild(LK.getAsset('streetLamp', {
anchorX: 0.5,
anchorY: 1,
x: 300,
y: 2632 - 150
}));
// Add lamp light glow effect
var lampGlow = game.addChild(LK.getAsset('lampGlow', {
anchorX: 1.5,
anchorY: 1.5,
x: 400,
y: 2350 - 150 - 230
}));
lampGlow.alpha = 0.3;
function selectLocation(location) {
if (!location.unlocked) {
return;
}
currentLocation = location;
// Update perform button cost
var buttonText = performButton.children[1];
buttonText.setText('Perform ($' + location.cost + ')');
}
function performMusic(musicOption) {
var cost = musicOption ? musicOption.cost : currentLocation ? currentLocation.cost : 0;
if (currentLocation && money >= cost && sleepLevel > 20) {
money -= cost;
// Calculate performance quality
var performance = calculatePerformance();
var baseEarnings = Math.floor(performance * currentLocation.earningMultiplier * (5 + Math.random() * 15));
var bonusEarnings = musicOption ? Math.floor(musicOption.cost * 0.5) : 0; // Bonus for using premium music
var totalEarnings = baseEarnings + bonusEarnings;
money += totalEarnings;
musicSkill += 1;
sleepLevel = Math.max(0, sleepLevel - 15);
moodLevel = Math.min(100, moodLevel + 5);
// Save money to storage for persistence
storage.money = money;
storage.totalEarnings = (storage.totalEarnings || 0) + totalEarnings;
// Police encounter chance
if (currentLocation.type === 'streetCorner' && Math.random() < 0.15) {
policeEncounter();
}
// Social media followers (after day 10)
if (currentDay >= 10 && !socialMediaUnlocked) {
socialMediaUnlocked = true;
}
if (socialMediaUnlocked && performance > 0.7) {
var newFollowers = Math.floor(performance * 10 * currentLocation.earningMultiplier);
followers += newFollowers;
}
if (musicOption && musicOption.sound) {
musician.performWithMusic(musicOption.sound);
} else {
musician.perform();
}
LK.getSound('coinDrop').play();
// Show earnings
showEarnings(totalEarnings);
updateDisplay();
checkWinConditions();
}
}
function calculatePerformance() {
var base = musicSkill / 100;
var moodBonus = moodLevel / 100 * 0.3;
var sleepBonus = sleepLevel / 100 * 0.2;
var equipmentBonus = equipmentLevel * 0.1;
return Math.min(1.0, base + moodBonus + sleepBonus + equipmentBonus);
}
function policeEncounter() {
LK.getSound('policeSiren').play();
var officer = game.addChild(LK.getAsset('policeOfficer', {
anchorX: 0.5,
anchorY: 1,
x: musician.x + 100,
y: musician.y
}));
var fine = Math.floor(5 + Math.random() * 15);
money = Math.max(0, money - fine);
moodLevel = Math.max(0, moodLevel - 20);
LK.setTimeout(function () {
officer.destroy();
}, 2000);
updateDisplay();
}
function showEarnings(amount) {
var earningsText = new Text2('+$' + amount, {
size: 30,
fill: 0x00FF00
});
earningsText.anchor.set(0.5, 0.5);
earningsText.x = musician.x;
earningsText.y = musician.y - 150;
game.addChild(earningsText);
tween(earningsText, {
y: earningsText.y - 50,
alpha: 0
}, {
duration: 1500,
onFinish: function onFinish() {
earningsText.destroy();
}
});
}
function nextDay() {
currentDay++;
// Reset time to 6 AM for new day
currentHour = 6;
currentMinute = 0;
// Daily resource drain
foodLevel = Math.max(0, foodLevel - 10);
waterLevel = Math.max(0, waterLevel - 10);
// Health effects
if (foodLevel < 20) {
healthLevel = Math.max(0, healthLevel - 15);
moodLevel = Math.max(0, moodLevel - 10);
}
if (waterLevel < 20) {
healthLevel = Math.max(0, healthLevel - 10);
}
if (sleepLevel < 30) {
healthLevel = Math.max(0, healthLevel - 5);
moodLevel = Math.max(0, moodLevel - 15);
}
// Save all game state to storage
storage.currentDay = currentDay;
storage.money = money;
storage.followers = followers;
storage.concerts = concerts;
storage.musicSkill = musicSkill;
storage.equipmentLevel = equipmentLevel;
storage.socialMediaUnlocked = socialMediaUnlocked;
storage.playerLevel = playerLevel;
// Random events
if (Math.random() < 0.2) {
randomEvent();
}
updateDisplay();
checkGameOver();
checkWinConditions();
}
function randomEvent() {
var events = [{
text: "A generous fan gave you $20!",
effect: function effect() {
money += 20;
}
}, {
text: "Rain ruined your guitar strings. -$10",
effect: function effect() {
money = Math.max(0, money - 10);
}
}, {
text: "You met a music producer!",
effect: function effect() {
if (musicSkill >= 70) {
concerts++;
money += 100;
}
}
}];
var event = events[Math.floor(Math.random() * events.length)];
event.effect();
var eventText = new Text2(event.text, {
size: 25,
fill: 0xFFFF00
});
eventText.anchor.set(0.5, 0.5);
eventText.x = 1024;
eventText.y = 1000;
game.addChild(eventText);
tween(eventText, {
alpha: 0
}, {
duration: 3000,
onFinish: function onFinish() {
eventText.destroy();
}
});
}
function updateClock() {
// Update clock hands based on current time
var hourAngle = currentHour % 12 * 30 + currentMinute * 0.5; // 30 degrees per hour + minute adjustment
var minuteAngle = currentMinute * 6; // 6 degrees per minute
hourHand.rotation = (hourAngle - 90) * Math.PI / 180; // -90 to start from 12 o'clock
minuteHand.rotation = (minuteAngle - 90) * Math.PI / 180;
// Update time text
var displayHour = currentHour === 0 ? 12 : currentHour > 12 ? currentHour - 12 : currentHour;
var ampm = currentHour < 12 ? 'AM' : 'PM';
var minuteStr = currentMinute < 10 ? '0' + currentMinute : currentMinute;
timeText.setText(displayHour + ':' + minuteStr + ' ' + ampm);
// Update daylight based on time
updateDaylight();
}
function updateDaylight() {
var timeOfDay = currentHour + currentMinute / 60;
var brightness;
if (timeOfDay >= 6 && timeOfDay < 8) {
// Dawn (6 AM - 8 AM)
brightness = 0.4 + (timeOfDay - 6) * 0.3; // 0.4 to 1.0
} else if (timeOfDay >= 8 && timeOfDay < 18) {
// Day (8 AM - 6 PM)
brightness = 1.0;
} else if (timeOfDay >= 18 && timeOfDay < 20) {
// Dusk (6 PM - 8 PM)
brightness = 1.0 - (timeOfDay - 18) * 0.3; // 1.0 to 0.4
} else {
// Night (8 PM - 6 AM)
brightness = 0.4;
}
dayLightLevel = brightness;
// Apply daylight effect to background
var dayColor = Math.floor(135 + (brightness - 0.4) * 100); // Sky blue that gets darker
var nightColor = Math.floor(20 + brightness * 50); // Dark blue/black
var skyColor = dayColor << 16 | Math.floor(dayColor * 0.8) << 8 | Math.floor(dayColor * 0.9);
if (brightness < 0.6) {
skyColor = nightColor << 16 | nightColor << 8 | Math.floor(nightColor * 1.2);
}
game.setBackgroundColor(skyColor);
// Adjust lamp glow based on time
if (lampGlow) {
lampGlow.alpha = brightness < 0.7 ? 0.6 : 0.2;
}
}
function updateDisplay() {
dayText.setText('Day ' + currentDay);
moneyText.setText('$' + money);
followersText.setText('Followers: ' + followers);
foodBar.setValue(foodLevel);
waterBar.setValue(waterLevel);
healthBar.setValue(healthLevel);
moodBar.setValue(moodLevel);
sleepBar.setValue(sleepLevel);
// Update level up button cost
var levelUpCost = 50 + equipmentLevel * 25;
var levelUpButtonText = levelUpButton.children[1];
levelUpButtonText.setText('Level Up ($' + levelUpCost + ')');
// Update clock display
updateClock();
}
function checkGameOver() {
if (healthLevel <= 0) {
gamePhase = 'gameOver';
LK.showGameOver();
} else if (moodLevel <= 0) {
gamePhase = 'gameOver';
LK.showGameOver();
} else if (currentDay > 30) {
if (concerts < 3 || followers < 1000) {
gamePhase = 'gameOver';
LK.showGameOver();
}
}
}
function checkWinConditions() {
if (concerts >= 3 && followers >= 1000 && currentDay <= 30) {
gamePhase = 'won';
LK.showYouWin();
}
}
// Game screens management
var currentScreen = 'main';
var allGameElements = [];
// Store all main game elements for hiding/showing
// Note: floor (cobblestone) is not included as it should remain visible as background
allGameElements.push(sittingBench);
allGameElements.push(performButton, levelUpButton, nextDayButton);
for (var i = 0; i < musicButtons.length; i++) {
allGameElements.push(musicButtons[i]);
}
allGameElements.push(foodBar, waterBar, healthBar, moodBar, sleepBar);
allGameElements.push(foodLabel, waterLabel, healthLabel, moodLabel, sleepLabel);
allGameElements.push(streetLamp, lampGlow);
allGameElements.push(musician);
// Create collapsible navigation window
var navWindow = new CollapsibleWindow();
navWindow.x = 2048; // Position at right edge
navWindow.y = 1466; // Center vertically
game.addChild(navWindow);
// Add navigation buttons to collapsible window with proper spacing relative to background
var buttonSpacing = 200;
var startY = -300;
var streetNavButton = navWindow.addNavButton('STREET CORNER', 'main', 'streetCornerNav', startY);
var marketNavButton = navWindow.addNavButton('MARKET', 'market', 'market', startY + buttonSpacing);
var hotelNavButton = navWindow.addNavButton('HOTEL', 'hotel', 'hotel', startY + buttonSpacing * 2);
var studioNavButton = navWindow.addNavButton('STUDIO', 'studio', 'studioNav', startY + buttonSpacing * 3);
// Market screen elements
var marketElements = [];
var marketTitle = new Text2('MARKET', {
size: 80,
fill: 0x000000,
font: "'Arial Black','Arial',sans-serif"
});
marketTitle.anchor.set(0.5, 0.5);
marketTitle.x = 1024;
marketTitle.y = 400;
marketElements.push(marketTitle);
// Hotel screen elements
var hotelElements = [];
var hotelTitle = new Text2('HOTEL', {
size: 80,
fill: 0x000000,
font: "'Arial Black','Arial',sans-serif"
});
hotelTitle.anchor.set(0.5, 0.5);
hotelTitle.x = 1024;
hotelTitle.y = 400;
hotelElements.push(hotelTitle);
// Studio screen elements
var studioElements = [];
var studioTitle = new Text2('STUDIO', {
size: 80,
fill: 0x000000,
font: "'Arial Black','Arial',sans-serif"
});
studioTitle.anchor.set(0.5, 0.5);
studioTitle.x = 1024;
studioTitle.y = 400;
studioElements.push(studioTitle);
function navigateToLocation(targetLocation) {
// Hide all current screen elements
hideCurrentScreenElements();
// Navigation buttons visibility handled by collapsible window
currentScreen = targetLocation;
if (targetLocation === 'main') {
// Show main game elements
for (var i = 0; i < allGameElements.length; i++) {
allGameElements[i].visible = true;
}
} else if (targetLocation === 'market') {
// Show market elements
for (var i = 0; i < marketElements.length; i++) {
if (!marketElements[i].parent) {
game.addChild(marketElements[i]);
}
marketElements[i].visible = true;
}
} else if (targetLocation === 'hotel') {
// Show hotel elements
for (var i = 0; i < hotelElements.length; i++) {
if (!hotelElements[i].parent) {
game.addChild(hotelElements[i]);
}
hotelElements[i].visible = true;
}
} else if (targetLocation === 'studio') {
// Show studio elements
for (var i = 0; i < studioElements.length; i++) {
if (!studioElements[i].parent) {
game.addChild(studioElements[i]);
}
studioElements[i].visible = true;
}
}
}
function hideCurrentScreenElements() {
// Hide main game elements
for (var i = 0; i < allGameElements.length; i++) {
allGameElements[i].visible = false;
}
// Hide market elements
for (var i = 0; i < marketElements.length; i++) {
marketElements[i].visible = false;
}
// Hide hotel elements
for (var i = 0; i < hotelElements.length; i++) {
hotelElements[i].visible = false;
}
// Hide studio elements
for (var i = 0; i < studioElements.length; i++) {
studioElements[i].visible = false;
}
}
// Initialize display
updateDisplay();
game.update = function () {
// Game runs at 60fps, update logic here if needed
resourceDrainTimer++;
// Drain resources every 60 frames (1 second at 60fps)
if (resourceDrainTimer >= 60) {
resourceDrainTimer = 0;
// Drain each resource by small amounts
foodLevel = Math.max(0, foodLevel - 0.5);
waterLevel = Math.max(0, waterLevel - 0.7);
healthLevel = Math.max(0, healthLevel - 0.3);
moodLevel = Math.max(0, moodLevel - 0.4);
sleepLevel = Math.max(0, sleepLevel - 0.6);
// Update the display bars
foodBar.setValue(foodLevel);
waterBar.setValue(waterLevel);
healthBar.setValue(healthLevel);
moodBar.setValue(moodLevel);
sleepBar.setValue(sleepLevel);
// Check for game over conditions due to resource depletion
checkGameOver();
// Update time progression (1 minute every second)
currentMinute += timeSpeed;
if (currentMinute >= 60) {
currentMinute = 0;
currentHour++;
if (currentHour >= 24) {
currentHour = 0;
}
}
// Update clock display
updateClock();
}
}; ===================================================================
--- original.js
+++ change.js
@@ -636,8 +636,13 @@
var musicSkill = storage.musicSkill || 10;
var equipmentLevel = storage.equipmentLevel || 1;
var socialMediaUnlocked = storage.socialMediaUnlocked || false;
var playerLevel = storage.playerLevel || 1;
+// Clock variables
+var currentHour = 6; // Start at 6 AM
+var currentMinute = 0;
+var timeSpeed = 1; // How fast time moves (1 = normal speed)
+var dayLightLevel = 0.5; // Controls background brightness based on time
// Resources
var foodLevel = 100;
var waterLevel = 100;
var healthLevel = 100;
@@ -669,8 +674,50 @@
followersText.anchor.set(0, 0);
followersText.x = 20;
followersText.y = 60;
LK.gui.topLeft.addChild(followersText);
+// Create clock display
+var clockContainer = LK.gui.topLeft.addChild(new Container());
+clockContainer.x = 20;
+clockContainer.y = 120;
+// Clock face
+var clockFace = clockContainer.addChild(LK.getAsset('clockFace', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 60,
+ y: 60
+}));
+// Hour hand
+var hourHand = clockContainer.addChild(LK.getAsset('clockHour', {
+ anchorX: 0.5,
+ anchorY: 1,
+ x: 60,
+ y: 60
+}));
+// Minute hand
+var minuteHand = clockContainer.addChild(LK.getAsset('clockMinute', {
+ anchorX: 0.5,
+ anchorY: 1,
+ x: 60,
+ y: 60
+}));
+// Clock center dot
+var clockCenter = clockContainer.addChild(LK.getAsset('clockCenter', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 60,
+ y: 60
+}));
+// Time text display
+var timeText = new Text2('6:00 AM', {
+ size: 20,
+ fill: 0x000000,
+ font: "'Arial Black','Arial',sans-serif"
+});
+timeText.anchor.set(0.5, 0);
+timeText.x = 60;
+timeText.y = 130;
+clockContainer.addChild(timeText);
// Create cobblestone background
var cobblestoneBackground = game.addChild(LK.getAsset('cobblestone', {
anchorX: 0,
anchorY: 0,
@@ -1058,8 +1105,11 @@
});
}
function nextDay() {
currentDay++;
+ // Reset time to 6 AM for new day
+ currentHour = 6;
+ currentMinute = 0;
// Daily resource drain
foodLevel = Math.max(0, foodLevel - 10);
waterLevel = Math.max(0, waterLevel - 10);
// Health effects
@@ -1129,8 +1179,52 @@
eventText.destroy();
}
});
}
+function updateClock() {
+ // Update clock hands based on current time
+ var hourAngle = currentHour % 12 * 30 + currentMinute * 0.5; // 30 degrees per hour + minute adjustment
+ var minuteAngle = currentMinute * 6; // 6 degrees per minute
+ hourHand.rotation = (hourAngle - 90) * Math.PI / 180; // -90 to start from 12 o'clock
+ minuteHand.rotation = (minuteAngle - 90) * Math.PI / 180;
+ // Update time text
+ var displayHour = currentHour === 0 ? 12 : currentHour > 12 ? currentHour - 12 : currentHour;
+ var ampm = currentHour < 12 ? 'AM' : 'PM';
+ var minuteStr = currentMinute < 10 ? '0' + currentMinute : currentMinute;
+ timeText.setText(displayHour + ':' + minuteStr + ' ' + ampm);
+ // Update daylight based on time
+ updateDaylight();
+}
+function updateDaylight() {
+ var timeOfDay = currentHour + currentMinute / 60;
+ var brightness;
+ if (timeOfDay >= 6 && timeOfDay < 8) {
+ // Dawn (6 AM - 8 AM)
+ brightness = 0.4 + (timeOfDay - 6) * 0.3; // 0.4 to 1.0
+ } else if (timeOfDay >= 8 && timeOfDay < 18) {
+ // Day (8 AM - 6 PM)
+ brightness = 1.0;
+ } else if (timeOfDay >= 18 && timeOfDay < 20) {
+ // Dusk (6 PM - 8 PM)
+ brightness = 1.0 - (timeOfDay - 18) * 0.3; // 1.0 to 0.4
+ } else {
+ // Night (8 PM - 6 AM)
+ brightness = 0.4;
+ }
+ dayLightLevel = brightness;
+ // Apply daylight effect to background
+ var dayColor = Math.floor(135 + (brightness - 0.4) * 100); // Sky blue that gets darker
+ var nightColor = Math.floor(20 + brightness * 50); // Dark blue/black
+ var skyColor = dayColor << 16 | Math.floor(dayColor * 0.8) << 8 | Math.floor(dayColor * 0.9);
+ if (brightness < 0.6) {
+ skyColor = nightColor << 16 | nightColor << 8 | Math.floor(nightColor * 1.2);
+ }
+ game.setBackgroundColor(skyColor);
+ // Adjust lamp glow based on time
+ if (lampGlow) {
+ lampGlow.alpha = brightness < 0.7 ? 0.6 : 0.2;
+ }
+}
function updateDisplay() {
dayText.setText('Day ' + currentDay);
moneyText.setText('$' + money);
followersText.setText('Followers: ' + followers);
@@ -1142,8 +1236,10 @@
// Update level up button cost
var levelUpCost = 50 + equipmentLevel * 25;
var levelUpButtonText = levelUpButton.children[1];
levelUpButtonText.setText('Level Up ($' + levelUpCost + ')');
+ // Update clock display
+ updateClock();
}
function checkGameOver() {
if (healthLevel <= 0) {
gamePhase = 'gameOver';
@@ -1298,6 +1394,17 @@
moodBar.setValue(moodLevel);
sleepBar.setValue(sleepLevel);
// Check for game over conditions due to resource depletion
checkGameOver();
+ // Update time progression (1 minute every second)
+ currentMinute += timeSpeed;
+ if (currentMinute >= 60) {
+ currentMinute = 0;
+ currentHour++;
+ if (currentHour >= 24) {
+ currentHour = 0;
+ }
+ }
+ // Update clock display
+ updateClock();
}
};
\ No newline at end of file
pixel yatak. In-Game asset. 2d. High contrast. No shadows
pixel
Market pixel. In-Game asset. 2d. High contrast. No shadows
hotel pixel. In-Game asset. 2d. High contrast. No shadows
sokak lambası kaldırım ve bank pixel. In-Game asset. 2d. High contrast. No shadows
Music studio pixel. In-Game asset. 2d. High contrast. No shadows
water pixel. In-Game asset. 2d. High contrast. No shadows
Navigation pixel. In-Game asset. 2d. High contrast. No shadows
pixel phone frame. In-Game asset. 2d. High contrast. No shadows
street lamp pixel. In-Game asset. 2d. High contrast. No shadows
make pixels
sitting bench pixels. In-Game asset. 2d. High contrast. No shadows
clock face. no clock hour stick and minute stick only the clock face In-Game asset. 2d. High contrast. No shadows
DİRTY AND BROKE guitar pixel. dik dursun In-Game asset. 2d. High contrast. No shadows
same picture but night
same picture but morning
same picture noon time pixel
police officer pixel. detaylı surat full body In-Game asset. 2d. High contrast. No shadows
same picture but evening