Code edit (1 edits merged)
Please save this source code
Code edit (3 edits merged)
Please save this source code
User prompt
Müşterileri birbirine çarmıyacak ve ekrandan çıkmayacak şekilde büyüt. Regular ilaç butonunun y koordinatını değiştirme ama x koordinatını ortala ve butonu 2 kat büyüt.Enhanced butonunu da 2 kat büyütüp regular butonunun altına koy. Bir de bir tane daha upgrade butonu oluştur. ismi upgrade customer speed olsun. Bu butonun işlevi de customer gelme hızını arttırsın her upgrade butonuna basınca ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (3 edits merged)
Please save this source code
User prompt
oyun başlayınca arkaya eczacı dükkan resmi koymam lazım o yüzden o boyunca sürekli gözükecek şekilde arkaplan koy resim işini bana bırak. Enhanced parayı katlıyor ya bu enhanced reguların parası kaç ise onu katlasın kendi başına fiyatı olmasın enhancedın
Code edit (10 edits merged)
Please save this source code
User prompt
gün başına ekranda yazan regular para textini ve enhanced textini güncelle upgrade yaptım ama oyunda hala aynı text yazıyor değişmemiş
User prompt
upgrade capacity parası ilk tur 150 olsun her upgrade başına 50 artsın. upgrade regular parası 200 olsun upgrade başına 50 artsın. upgrade enhanced parası 300 olsun upgrade başına 50 artsın.
Code edit (1 edits merged)
Please save this source code
Code edit (2 edits merged)
Please save this source code
User prompt
end of day menüdeki upgrade butonları ayrı şekilde olucaklar ve birbirlerine çarpmıcaklar. Day complete butonunu şimdiki olduğundan daha yukarı bir yere koy total money kısmını ise onun hemen altına kyo ve next day butounu ise şimdiki olduğu yerden daha aşağı bir yere koy ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
End of day menüyü düzelticez.O end of day menüsünün gri ekranının en üstüne day complete yazısını koyucaksın ve 2kat büyüt yazıyı. O end of day menüsünün gri ekranının üstündeki day complete yazısını hemen altına total money yazısını koy. O end of day menüsünün gri ekranının y koordinatı olacak şekilde ortasına upgrade butonlarını üstten aşağı doğru diz ve upgrade butonlarının yazısı doğru yere yaz ve bir de upgrade butonlarını 2.5 kat büyüt ama upgarde butonları birbirinin içine girmesin. O end of day menüsünün gri ekranının sağ alt kısmına next day butonunu koy ve onu da 1.5 kat büyüt. end of day menüsü ekrana çıktığında arkada customer varsa direkt kalksın ama bu sefer customer kalkarken paramız azalmasın bu yüzden de customerların üstündeki kazandığımız ya da kaybettiğimiz para yazmasın. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
customerları çok uzun süre bekletince kaçıyorlar ya onlar kaçınca para kaybediyoruz ya o para regular ilaç parası ile aynı olsun her gün için. Bir de end day menüyü düzelticez. Day complete yazısını menünün en üstüne yaz.Next day butonu biraz daha büyük olsun ve menünün sağ altında olsun ve upgrade butonlarını orataya hizala ve ekrandan çıkmıcak ve birbine çarpmıcak kadar da büyüt. Para ise yine day complete yazısının hemen altında yazsın ve onu da biraz daha büyüt ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Oyun içindeki süre eksilere düşmesin 0 olunca End of day menuye geçsin ve oyun dursun daha sonra ise sadece next day butona tıklayınca oyun başlasın. Bir de normal paramızın başlangıç değeri 0 olsun.Yani ilk gün 0 parayla başlayalım.Bir de tam customerlar kaybolurken üstlerinde para değerleri yazsın ve sonra kaybolsun customer ile birlikte. Eğer kazandığımız para varsa yeşil font ile para değeri yazsın eğer kaybettiğimiz para varsa kırmızı font ile para değeri yazsın.Kazandığımız parada örnek veriyorum +25 dolar şeklinde yazsın yani + yazsın başında ve kaybettiğimiz parada ise örnek veriyorum -25 dolar şeklinde yazsın yani - yazsın başında. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
oyun gün içinde asla bitmesin yanlış bir karar verdiğimizde bizden belli bir miktar dolar kessin.Bu belli bir miktar para 1. gün 50 olsun ve sonraki her gün için 50şer dolar artsın. Eksi paraya düşünce oyun bitsin. Yeni upgradeler ekle oyun sonu ekranına.Bunlardan birisi enchaned parasını arttırma olsun yani yeşil ilaç verdiğimizdeki para örnek veriyorum 2.5x yerine 2.6x olsun.Bir de regular olan ilacı da arttırma upgradei olsun aynı enhanced gibi. ve Regular olan ilacın başlangıc değeri 50-100 dolar yerine 10-20 dolar olsun.Enhanced olan 2.5x yerine 1.4x olsun ve her upgrade 0.1x artsın.Regular olan upgradei ise 10-20den 15-25 olsun yani 5er 5er artsın.
User prompt
oyuna başlatma tuşu ve ekranı koy ve gün 1den başlasın ve daha çok karakter olsun bir de customer detayları daha büyük olsun okunmuyor alttaki ilaç ve yeşil maddeli ilacın da boyutu biraz daha büyük olsun bir de fontu comic sans olsun
User prompt
istediğimiz zaman sonraki günü geçemicez yani next day butonunu kaldır. Süreli olsun sadece next daye geçebilmek. Bir de gün bittiğinde önümüze bir menü koy. Ezcazı ekranı değil başka bir menü olsun bu ve süre sayacını da durdur işte o menüde next day butonu olucak ve sonraki güne geçebilcez ve upgrade butonunu da oyunun içinden kaldırıp gün geçme menüsünün içine koy
Code edit (1 edits merged)
Please save this source code
User prompt
Pharmacy Tycoon
Initial prompt
Ezcacı oyunu yapıcam. önüme adamlar gelicek ben de onların sağlık geçmişlerine bakıcam ve ona göre ilaç vericem. Sonra o gün içinde başka bir adama geçicek sıra böyle sıra sıra adamlar gelicek eczacı dükkanına. Oyunda günler süreli olucak süre bitince 2. güne geçme tuşu çıkıcak karşımıza ve 2. güne geçicez sonra da 3. 4. gün gibi devam edicek gün içinde de sınırlı adam gelebilecek her gün aynı sayıda adam gelmesin en az da 2 adam gelsin en çok da süre bitine gere rastgele olsun. Bazen adamın tipinden anlayacağımız üzere keko tipler gelicek ve bunlara ilacı verirken içinde yeşil madde de verebilcez böyle yaparsak daha fazla para kazanıcaz ama yanlış kişilere yeşil madde verirsek onlar bizi polise şikayet edip paramızı kesecek bir miktar.Bir de para sistemi olacak her adamdan sonra para kazanıcaz normal ilaç için daha az para alırken yeşil maddeli ilaç verdiğimizde daha çok para alıcaz.Para ile de her günün sonunda eczacı dükkanımızı genişletebilecez. Mesela dükkan içine maksimum kaç tane adam giribileceği gibi faktörleri geliştirme yapıcaz.Dükkanda aksesuar geliştirmesi de olsun kimisi güçlendirsin bizi kimisi de sadece görünüş olsun.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
volume: 0.3,
language: "turkish"
});
/****
* Classes
****/
var ConfirmationDialog = Container.expand(function (message, cost, onConfirm) {
var self = Container.call(this);
// Dialog background - covers entire screen to block clicks
var dialogBg = self.attachAsset('pharmacyBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
scaleX: 1.0,
scaleY: 1.0
});
dialogBg.tint = 0x000000;
dialogBg.alpha = 1.0;
// Add click handler to background to prevent clicks from going through
dialogBg.down = function (x, y, obj) {
// Do nothing - this blocks clicks from reaching other elements
};
// Get current language texts
var texts = languageTexts[currentLanguage];
// Confirmation message
var messageContent = cost > 0 ? texts.upgradeQuestion + '\n' + message + '\n' + texts.cost + cost : message + '\n\n' + texts.addonQuestion;
var messageText = new Text2(messageContent, {
size: 60,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
messageText.anchor.set(0.5, 0.5);
messageText.x = 1024;
messageText.y = 1200;
self.addChild(messageText);
// Yes button
var yesButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 824,
y: 1500,
scaleX: 1.5,
scaleY: 1.5
}));
yesButton.tint = 0x228b22;
var yesText = new Text2(texts.yes, {
size: 50,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
yesText.anchor.set(0.5, 0.5);
yesText.x = 824;
yesText.y = 1500;
self.addChild(yesText);
// No button
var noButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1224,
y: 1500,
scaleX: 1.5,
scaleY: 1.5
}));
noButton.tint = 0xcc0000;
var noText = new Text2(texts.no, {
size: 50,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
noText.anchor.set(0.5, 0.5);
noText.x = 1224;
noText.y = 1500;
self.addChild(noText);
// Store text references for language updates
self.messageText = messageText;
self.yesText = yesText;
self.noText = noText;
self.originalMessage = message;
self.originalCost = cost;
// Update dialog text when language changes
self.updateLanguage = function () {
var texts = languageTexts[currentLanguage];
var translatedMessage = self.originalMessage;
// Translate upgrade names for confirmation dialogs
if (self.originalCost > 0) {
var upgradeTranslations = {
'turkish': {
'Kapasite Yükseltmesi': 'Kapasite Yükseltmesi',
'Normal İlaç Yükseltmesi': 'Normal İlaç Yükseltmesi',
'Gelişmiş İlaç Yükseltmesi': 'Gelişmiş İlaç Yükseltmesi',
'Müşteri Hızı Yükseltmesi': 'Müşteri Hızı Yükseltmesi'
},
'english': {
'Kapasite Yükseltmesi': 'Capacity Upgrade',
'Normal İlaç Yükseltmesi': 'Regular Medicine Upgrade',
'Gelişmiş İlaç Yükseltmesi': 'Enhanced Medicine Upgrade',
'Müşteri Hızı Yükseltmesi': 'Customer Speed Upgrade'
},
'french': {
'Kapasite Yükseltmesi': 'Amélioration de Capacité',
'Normal İlaç Yükseltmesi': 'Amélioration Médicament Régulier',
'Gelişmiş İlaç Yükseltmesi': 'Amélioration Médicament Amélioré',
'Müşteri Hızı Yükseltmesi': 'Amélioration Vitesse Client'
},
'korean': {
'Kapasite Yükseltmesi': '용량 업그레이드',
'Normal İlaç Yükseltmesi': '일반 약물 업그레이드',
'Gelişmiş İlaç Yükseltmesi': '향상된 약물 업그레이드',
'Müşteri Hızı Yükseltmesi': '고객 속도 업그레이드'
},
'italian': {
'Kapasite Yükseltmesi': 'Potenziamento Capacità',
'Normal İlaç Yükseltmesi': 'Potenziamento Medicina Regolare',
'Gelişmiş İlaç Yükseltmesi': 'Potenziamento Medicina Avanzata',
'Müşteri Hızı Yükseltmesi': 'Potenziamento Velocità Cliente'
},
'german': {
'Kapasite Yükseltmesi': 'Kapazitäts-Upgrade',
'Normal İlaç Yükseltmesi': 'Normale Medizin-Upgrade',
'Gelişmiş İlaç Yükseltmesi': 'Verstärkte Medizin-Upgrade',
'Müşteri Hızı Yükseltmesi': 'Kundengeschwindigkeit-Upgrade'
},
'russian': {
'Kapasite Yükseltmesi': 'Улучшение Вместимости',
'Normal İlaç Yükseltmesi': 'Улучшение Обычного Лекарства',
'Gelişmiş İlaç Yükseltmesi': 'Улучшение Усиленного Лекарства',
'Müşteri Hızı Yükseltmesi': 'Улучшение Скорости Клиентов'
},
'pirate': {
'Kapasite Yükseltmesi': 'Ambarı büyüt bre!',
'Normal İlaç Yükseltmesi': 'Hapı güçlendir ha!',
'Gelişmiş İlaç Yükseltmesi': 'Hapı kudurt aslanım!',
'Müşteri Hızı Yükseltmesi': 'Müşteriye yelken açtır!'
}
};
if (upgradeTranslations[currentLanguage] && upgradeTranslations[currentLanguage][self.originalMessage]) {
translatedMessage = upgradeTranslations[currentLanguage][self.originalMessage];
}
}
var messageContent = self.originalCost > 0 ? texts.upgradeQuestion + '\n' + translatedMessage + '\n' + texts.cost + self.originalCost : translatedMessage + '\n\n' + texts.addonQuestion;
self.messageText.setText(messageContent);
self.yesText.setText(texts.yes);
self.noText.setText(texts.no);
};
// Event handlers
yesButton.down = function (x, y, obj) {
onConfirm();
self.destroy();
};
noButton.down = function (x, y, obj) {
self.destroy();
};
return self;
});
var Customer = Container.expand(function () {
var self = Container.call(this);
// Determine customer type based on active addons
self.isDouble = doubleCustomersActive && Math.random() < 0.2;
self.isVip = vipCustomersActive && Math.random() < 0.15;
self.isSuspicious = !self.isDouble && !self.isVip && Math.random() < 0.3;
self.willReport = self.isSuspicious ? false : Math.random() < 0.4;
self.served = false;
self.timeOnScreen = 0;
self.needsSecondDose = self.isDouble;
// Define customer types
var customerTypes = ['customer', 'customerElderly', 'customerYoung', 'customerBusiness'];
var selectedType;
if (self.isDouble) {
selectedType = 'doubleCustomer';
} else if (self.isVip) {
selectedType = 'vipCustomer';
} else if (self.isSuspicious) {
selectedType = 'suspiciousCustomer';
} else {
selectedType = customerTypes[Math.floor(Math.random() * customerTypes.length)];
}
self.customerType = selectedType;
var customerGraphics = self.attachAsset(selectedType, {
anchorX: 0.5,
anchorY: 1.0,
scaleX: 1.5,
scaleY: 1.5
});
self.regularPayment = 10 + Math.floor(Math.random() * 11);
self.enhancedPayment = Math.floor((self.regularPayment + regularUpgradeBonus) * enhancedMultiplier);
self.update = function () {
self.timeOnScreen++;
var patienceTime = riskBalanceActive ? 210 : 300; // 30% less patience if risk balance active
if (self.timeOnScreen > patienceTime && !self.served) {
self.leaveAngry();
}
};
self.serveRegular = function () {
if (self.served) {
return;
}
self.served = true;
var earnedAmount = self.regularPayment + regularUpgradeBonus;
// "Might report illegal activity!" (willReport true): regular = earn, enhanced = 50% earn
// "Seems trustworthy" (willReport false, not suspicious): always earn
// Suspicious: regular = lose, enhanced = earn
if (self.isSuspicious) {
// Suspicious: regular = lose, enhanced = earn
var penaltyAmount = 20 * day;
money -= penaltyAmount;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('warning').volume = savedVolume;
LK.getSound('warning').play();
}
penalties++;
self.showMoneyLost(penaltyAmount);
earnedAmount = 0; // No money earned
} else if (self.willReport) {
// "Might report illegal activity!" - regular = earn
// EnhancedFocus disables regular income
if (enhancedFocusActive) {
earnedAmount = 0;
} else {
// Regular enhanced chance - 15% chance to get enhanced price
if (regularEnhancedChance && Math.random() < 0.15) {
earnedAmount = Math.floor((self.regularPayment + regularUpgradeBonus) * enhancedMultiplier);
}
// VIP customer doubles money
if (self.isVip) {
earnedAmount *= 2;
}
// Double money days
if (doubleMoneyDays > 0) {
earnedAmount *= 2;
}
// Risk balance - 1.5x multiplier
if (riskBalanceActive) {
earnedAmount = Math.floor(earnedAmount * 1.5);
}
}
money += earnedAmount;
if (earnedAmount > 0) {
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('cashRegister').volume = savedVolume;
LK.getSound('cashRegister').play();
}
self.showMoneyEarned(earnedAmount);
}
} else {
// "Seems trustworthy" (not suspicious, willReport false): always earn
if (enhancedFocusActive) {
earnedAmount = 0;
} else {
// Regular enhanced chance - 15% chance to get enhanced price
if (regularEnhancedChance && Math.random() < 0.15) {
earnedAmount = Math.floor((self.regularPayment + regularUpgradeBonus) * enhancedMultiplier);
}
// VIP customer doubles money
if (self.isVip) {
earnedAmount *= 2;
}
// Double money days
if (doubleMoneyDays > 0) {
earnedAmount *= 2;
}
// Risk balance - 1.5x multiplier
if (riskBalanceActive) {
earnedAmount = Math.floor(earnedAmount * 1.5);
}
}
money += earnedAmount;
if (earnedAmount > 0) {
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('cashRegister').volume = savedVolume;
LK.getSound('cashRegister').play();
}
self.showMoneyEarned(earnedAmount);
}
}
// Handle double customers
if (self.needsSecondDose) {
self.needsSecondDose = false;
self.served = false; // Allow second serving
return; // Don't leave yet
}
self.leave();
};
self.serveEnhanced = function () {
if (self.served) {
return;
}
self.served = true;
// "Might report illegal activity!" (willReport true): enhanced = 50% earn, 50% penalty
// "Seems trustworthy" (willReport false, not suspicious): always earn
// Suspicious: enhanced = earn, regular = lose
if (self.isSuspicious) {
// Suspicious: enhanced = earn
var enhancedAmount = Math.floor((self.regularPayment + regularUpgradeBonus) * enhancedMultiplier);
// Enhanced double chance - 15% chance for 2x money
if (enhancedDoubleChance && Math.random() < 0.15) {
enhancedAmount *= 2;
}
// Enhanced focus addon - 2x money from enhanced
if (enhancedFocusActive) {
enhancedAmount *= 2;
}
// VIP customer doubles money
if (self.isVip) {
enhancedAmount *= 2;
}
// Double money days
if (doubleMoneyDays > 0) {
enhancedAmount *= 2;
}
// Risk balance - 1.5x multiplier
if (riskBalanceActive) {
enhancedAmount = Math.floor(enhancedAmount * 1.5);
}
money += enhancedAmount;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('cashRegister').volume = savedVolume;
LK.getSound('cashRegister').play();
}
self.showMoneyEarned(enhancedAmount);
} else if (self.willReport) {
// "Might report illegal activity!" - enhanced = 50% earn, 50% penalty
if (Math.random() < 0.3) {
// Earn money
var enhancedAmount = Math.floor((self.regularPayment + regularUpgradeBonus) * enhancedMultiplier);
if (enhancedDoubleChance && Math.random() < 0.15) {
enhancedAmount *= 2;
}
if (enhancedFocusActive) {
enhancedAmount *= 2;
}
if (self.isVip) {
enhancedAmount *= 2;
}
if (doubleMoneyDays > 0) {
enhancedAmount *= 2;
}
if (riskBalanceActive) {
enhancedAmount = Math.floor(enhancedAmount * 1.5);
}
money += enhancedAmount;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('cashRegister').volume = savedVolume;
LK.getSound('cashRegister').play();
}
self.showMoneyEarned(enhancedAmount);
} else {
// Penalty
var penaltyAmount = 20 * day;
money -= penaltyAmount;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('warning').volume = savedVolume;
LK.getSound('warning').play();
}
penalties++;
self.showMoneyLost(penaltyAmount);
}
} else {
// "Seems trustworthy" (not suspicious, willReport false): 60% chance to earn
if (Math.random() < 0.7) {
// Earn money
var enhancedAmount = Math.floor((self.regularPayment + regularUpgradeBonus) * enhancedMultiplier);
if (enhancedDoubleChance && Math.random() < 0.15) {
enhancedAmount *= 2;
}
if (enhancedFocusActive) {
enhancedAmount *= 2;
}
if (self.isVip) {
enhancedAmount *= 2;
}
if (doubleMoneyDays > 0) {
enhancedAmount *= 2;
}
if (riskBalanceActive) {
enhancedAmount = Math.floor(enhancedAmount * 1.5);
}
money += enhancedAmount;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('cashRegister').volume = savedVolume;
LK.getSound('cashRegister').play();
}
self.showMoneyEarned(enhancedAmount);
} else {
// 40% chance to lose money
var penaltyAmount = 15 * day;
money -= penaltyAmount;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('warning').volume = savedVolume;
LK.getSound('warning').play();
}
penalties++;
self.showMoneyLost(penaltyAmount);
}
}
// Handle double customers
if (self.needsSecondDose) {
self.needsSecondDose = false;
self.served = false; // Allow second serving
return; // Don't leave yet
}
self.leave();
};
self.leave = function () {
tween(self, {
alpha: 0,
y: self.y - 100
}, {
duration: 500,
onFinish: function onFinish() {
self.destroy();
}
});
};
self.leaveAngry = function () {
var penaltyAmount = 10 + Math.floor(Math.random() * 11) + 15 * (day - 1);
money -= penaltyAmount;
self.served = true; // Mark as served so it gets removed from customers array
self.showMoneyLost(penaltyAmount);
self.leave();
};
self.showMoneyEarned = function (amount) {
var moneyText = new Text2('+$' + amount, {
size: 120,
fill: 0x00FF00,
font: 'Comic Sans MS'
});
moneyText.anchor.set(0.5, 0.5);
moneyText.x = self.x;
moneyText.y = self.y - 200;
// Start with larger scale for emphasis
moneyText.scaleX = 1.5;
moneyText.scaleY = 1.5;
game.addChild(moneyText);
tween(moneyText, {
y: moneyText.y - 150,
alpha: 0,
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 2000,
onFinish: function onFinish() {
moneyText.destroy();
}
});
};
self.showMoneyLost = function (amount) {
var moneyText = new Text2('-$' + amount, {
size: 120,
fill: 0xFF0000,
font: 'Comic Sans MS'
});
moneyText.anchor.set(0.5, 0.5);
moneyText.x = self.x;
moneyText.y = self.y - 200;
// Start with larger scale for emphasis
moneyText.scaleX = 1.5;
moneyText.scaleY = 1.5;
game.addChild(moneyText);
tween(moneyText, {
y: moneyText.y - 150,
alpha: 0,
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 2000,
onFinish: function onFinish() {
moneyText.destroy();
}
});
};
return self;
});
var EndOfDayMenu = Container.expand(function () {
var self = Container.call(this);
// Start menu music immediately when menu is created with stored volume
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.playMusic('menuMusic', {
fade: {
start: 0,
end: savedVolume,
duration: 100
}
});
}
// Menu background
var menuBg = self.attachAsset('pharmacyBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
scaleX: 0.8,
scaleY: 0.6
});
menuBg.tint = 0x000000;
menuBg.alpha = 0.8;
// Menu title - Day Complete at top, moved higher
var texts = languageTexts[currentLanguage];
var titleText = texts.dayComplete.replace('{day}', day);
var menuTitle = new Text2(titleText, {
size: 160,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
menuTitle.anchor.set(0.5, 0.5);
menuTitle.x = 1024;
menuTitle.y = 650;
self.addChild(menuTitle);
// Daily earnings text - below title
var earningsText = new Text2(texts.totalMoney + money, {
size: 70,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
earningsText.anchor.set(0.5, 0.5);
earningsText.x = 1024;
earningsText.y = 880;
self.addChild(earningsText);
// Capacity upgrade button - center top with more spacing (only show if capacity < 5)
var capacityButton = null;
var capacityText = null;
if (pharmacyCapacity < 5) {
capacityButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2050,
scaleX: 2.5,
scaleY: 2.5
}));
var capacityCost = 150 + (pharmacyCapacity - 1) * 50;
var capacityTextColor = money >= capacityCost ? 0xFFFFFF : 0xFF0000;
capacityText = new Text2(texts.capacityUpgrade + capacityCost, {
size: 55,
fill: capacityTextColor,
font: 'Comic Sans MS'
});
capacityText.anchor.set(0.5, 0.5);
capacityText.x = 1024;
capacityText.y = 2050;
self.addChild(capacityText);
}
// Regular payment upgrade button - center middle with proper spacing
var regularUpgradeButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1450,
scaleX: 2.5,
scaleY: 2.5
}));
var regularUpgradeCost = 200 + (regularUpgradeLevel - 1) * 50;
var regularTextColor = money >= regularUpgradeCost ? 0xFFFFFF : 0xFF0000;
var regularUpgradeText = new Text2(texts.regularUpgrade + regularUpgradeCost, {
size: 55,
fill: regularTextColor,
font: 'Comic Sans MS'
});
regularUpgradeText.anchor.set(0.5, 0.5);
regularUpgradeText.x = 1024;
regularUpgradeText.y = 1450;
self.addChild(regularUpgradeText);
// Enhanced multiplier upgrade button - center bottom with proper spacing
var enhancedUpgradeButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1750,
scaleX: 2.5,
scaleY: 2.5
}));
var enhancedUpgradeCost = 300 + (enhancedUpgradeLevel - 1) * 50;
var enhancedTextColor = money >= enhancedUpgradeCost ? 0xFFFFFF : 0xFF0000;
var enhancedUpgradeText = new Text2(texts.enhancedUpgrade + enhancedUpgradeCost, {
size: 55,
fill: enhancedTextColor,
font: 'Comic Sans MS'
});
enhancedUpgradeText.anchor.set(0.5, 0.5);
enhancedUpgradeText.x = 1024;
enhancedUpgradeText.y = 1750;
self.addChild(enhancedUpgradeText);
// Customer speed upgrade button
var customerSpeedButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1150,
scaleX: 2.5,
scaleY: 2.5
}));
var customerSpeedCost = 250 + customerSpeedUpgrade * 75;
var customerSpeedTextColor = money >= customerSpeedCost ? 0xFFFFFF : 0xFF0000;
var customerSpeedText = new Text2(texts.customerSpeedUpgrade + customerSpeedCost, {
size: 55,
fill: customerSpeedTextColor,
font: 'Comic Sans MS'
});
customerSpeedText.anchor.set(0.5, 0.5);
customerSpeedText.x = 1024;
customerSpeedText.y = 1150;
self.addChild(customerSpeedText);
// Next day button - bottom right, moved lower
var nextDayButton = self.addChild(LK.getAsset('nextDayButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1600,
y: 2190,
scaleX: 1.5,
scaleY: 1.5
}));
var nextDayText = new Text2(texts.nextDay, {
size: 50,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
nextDayText.anchor.set(0.5, 0.5);
nextDayText.x = 1600;
nextDayText.y = 2190;
self.addChild(nextDayText);
// Function to update upgrade text colors based on current money
function updateUpgradeTextColors() {
var texts = languageTexts[currentLanguage];
if (capacityText && pharmacyCapacity < 5) {
var capacityCost = 150 + (pharmacyCapacity - 1) * 50;
var capacityTextColor = money >= capacityCost ? 0xFFFFFF : 0xFF0000;
capacityText.tint = capacityTextColor;
capacityText.setText(texts.capacityUpgrade + capacityCost);
}
var regularUpgradeCost = 200 + (regularUpgradeLevel - 1) * 50;
var regularTextColor = money >= regularUpgradeCost ? 0xFFFFFF : 0xFF0000;
regularUpgradeText.tint = regularTextColor;
regularUpgradeText.setText(texts.regularUpgrade + regularUpgradeCost);
var enhancedUpgradeCost = 300 + (enhancedUpgradeLevel - 1) * 50;
var enhancedTextColor = money >= enhancedUpgradeCost ? 0xFFFFFF : 0xFF0000;
enhancedUpgradeText.tint = enhancedTextColor;
enhancedUpgradeText.setText(texts.enhancedUpgrade + enhancedUpgradeCost);
var customerSpeedCost = 250 + customerSpeedUpgrade * 75;
var customerSpeedTextColor = money >= customerSpeedCost ? 0xFFFFFF : 0xFF0000;
customerSpeedText.tint = customerSpeedTextColor;
customerSpeedText.setText(texts.customerSpeedUpgrade + customerSpeedCost);
}
// Initial color update
updateUpgradeTextColors();
// Event handlers
if (capacityButton) {
capacityButton.down = function (x, y, obj) {
var capacityCost = 150 + (pharmacyCapacity - 1) * 50;
if (money >= capacityCost && pharmacyCapacity < 5) {
var texts = languageTexts[currentLanguage];
var upgradeName = currentLanguage === 'turkish' ? 'Kapasite Yükseltmesi' : 'Capacity Upgrade';
var confirmDialog = game.addChild(new ConfirmationDialog(upgradeName, capacityCost, function () {
money -= capacityCost;
pharmacyCapacity++;
var texts = languageTexts[currentLanguage];
earningsText.setText(texts.totalMoney + money);
moneyText.setText(texts.money + money);
capacityText2.setText(texts.capacity + pharmacyCapacity);
if (pharmacyCapacity >= 5) {
capacityButton.destroy();
capacityText.destroy();
} else {
capacityText.setText(texts.capacityUpgrade + (150 + (pharmacyCapacity - 1) * 50));
}
regularLabel.setText(texts.regularMedicine + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
enhancedLabel.setText(texts.enhancedMedicine + enhancedMultiplier.toFixed(1) + texts.profit);
updateUpgradeTextColors();
}));
}
};
}
regularUpgradeButton.down = function (x, y, obj) {
var regularUpgradeCost = 200 + (regularUpgradeLevel - 1) * 50;
if (money >= regularUpgradeCost) {
var texts = languageTexts[currentLanguage];
var upgradeName = currentLanguage === 'turkish' ? 'Normal İlaç Yükseltmesi' : 'Regular Medicine Upgrade';
var confirmDialog = game.addChild(new ConfirmationDialog(upgradeName, regularUpgradeCost, function () {
money -= regularUpgradeCost;
regularUpgradeLevel++;
regularUpgradeBonus += 5;
var texts = languageTexts[currentLanguage];
earningsText.setText(texts.totalMoney + money);
moneyText.setText(texts.money + money);
regularUpgradeText.setText(texts.regularUpgrade + (200 + (regularUpgradeLevel - 1) * 50));
regularLabel.setText(texts.regularMedicine + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
enhancedLabel.setText(texts.enhancedMedicine + enhancedMultiplier.toFixed(1) + texts.profit);
updateUpgradeTextColors();
}));
}
};
enhancedUpgradeButton.down = function (x, y, obj) {
var enhancedUpgradeCost = 300 + (enhancedUpgradeLevel - 1) * 50;
if (money >= enhancedUpgradeCost) {
var texts = languageTexts[currentLanguage];
var upgradeName = currentLanguage === 'turkish' ? 'Gelişmiş İlaç Yükseltmesi' : 'Enhanced Medicine Upgrade';
var confirmDialog = game.addChild(new ConfirmationDialog(upgradeName, enhancedUpgradeCost, function () {
money -= enhancedUpgradeCost;
enhancedUpgradeLevel++;
enhancedMultiplier += 0.2;
var texts = languageTexts[currentLanguage];
earningsText.setText(texts.totalMoney + money);
moneyText.setText(texts.money + money);
enhancedUpgradeText.setText(texts.enhancedUpgrade + (300 + (enhancedUpgradeLevel - 1) * 50));
regularLabel.setText(texts.regularMedicine + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
enhancedLabel.setText(texts.enhancedMedicine + enhancedMultiplier.toFixed(1) + texts.profit);
updateUpgradeTextColors();
}));
}
};
customerSpeedButton.down = function (x, y, obj) {
var customerSpeedCost = 250 + customerSpeedUpgrade * 75;
if (money >= customerSpeedCost) {
var texts = languageTexts[currentLanguage];
var upgradeName = currentLanguage === 'turkish' ? 'Müşteri Hızı Yükseltmesi' : 'Customer Speed Upgrade';
var confirmDialog = game.addChild(new ConfirmationDialog(upgradeName, customerSpeedCost, function () {
money -= customerSpeedCost;
customerSpeedUpgrade++;
var texts = languageTexts[currentLanguage];
earningsText.setText(texts.totalMoney + money);
moneyText.setText(texts.money + money);
customerSpeedText.setText(texts.customerSpeedUpgrade + (250 + customerSpeedUpgrade * 75));
updateUpgradeTextColors();
}));
}
};
nextDayButton.down = function (x, y, obj) {
nextDay();
self.destroy();
endOfDayMenu = null;
gameRunning = true;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.playMusic('gameplayMusic', {
fade: {
start: 0,
end: savedVolume,
duration: 100
}
});
} else {}
};
return self;
});
var GameStartScreen = Container.expand(function () {
var self = Container.call(this);
// Start screen background
var startBg = self.attachAsset('startBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
});
// Game title
var texts = languageTexts[currentLanguage];
var titleText = new Text2(texts.gameTitle, {
size: 200,
fill: 0x0a1df0,
font: 'Comic Sans MS'
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 350;
self.addChild(titleText);
// Save reference to titleText
self.titleText = titleText;
// Subtitle
var subtitleText = new Text2(texts.gameSubtitle, {
size: 90,
fill: 0x000000,
font: 'Comic Sans MS'
});
subtitleText.anchor.set(0.5, 0.5);
subtitleText.x = 1024;
subtitleText.y = 600;
self.addChild(subtitleText);
// Save reference to subtitleText
self.subtitleText = subtitleText;
// Settings button
var settingsButton = self.addChild(LK.getAsset('menuButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1600,
scaleX: 1.5,
scaleY: 1.5
}));
settingsButton.tint = 0x808080;
var settingsText = new Text2(texts.settings, {
size: 50,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
settingsText.anchor.set(0.5, 0.5);
settingsText.x = 1024;
settingsText.y = 1600;
self.addChild(settingsText);
// Save reference to settingsText
self.settingsText = settingsText;
// How to play button
var howToPlayButton = self.addChild(LK.getAsset('menuButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1850,
scaleX: 1.8,
scaleY: 1.5
}));
howToPlayButton.tint = 0x4169e1;
var howToPlayText = new Text2(texts.howToPlay, {
size: 50,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
howToPlayText.anchor.set(0.5, 0.5);
howToPlayText.x = 1024;
howToPlayText.y = 1850;
self.addChild(howToPlayText);
// Save reference to howToPlayText
self.howToPlayText = howToPlayText;
// Difficulty selection button
self.selectedDifficulty = 'normal';
var difficultyButton = self.addChild(LK.getAsset('menuButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1350,
scaleX: 1.8,
scaleY: 1.5
}));
difficultyButton.tint = 0x4682b4;
var difficultyDisplayText = self.selectedDifficulty === 'easy' ? texts.easy : self.selectedDifficulty === 'hard' ? texts.hard : texts.normal;
var difficultyText = new Text2(texts.difficulty + difficultyDisplayText, {
size: 50,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
difficultyText.anchor.set(0.5, 0.5);
difficultyText.x = 1024;
difficultyText.y = 1350;
self.addChild(difficultyText);
// Save reference to difficultyText
self.difficultyText = difficultyText;
// Start button
var startButton = self.addChild(LK.getAsset('startButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1100,
scaleX: 1.8,
scaleY: 1.8
}));
var startButtonText = new Text2(texts.start, {
size: 60,
fill: 0x000000,
font: 'Comic Sans MS'
});
startButtonText.anchor.set(0.5, 0.5);
startButtonText.x = 1024;
startButtonText.y = 1100;
self.addChild(startButtonText);
// Save reference to startButtonText
self.startButtonText = startButtonText;
// Update difficulty display
function updateDifficultyDisplay() {
var texts = languageTexts[currentLanguage];
var difficultyNames = {
'easy': texts.easy,
'normal': texts.normal,
'hard': texts.hard
};
difficultyText.setText(texts.difficulty + difficultyNames[self.selectedDifficulty]);
var colors = {
'easy': 0x90EE90,
'normal': 0x4682b4,
'hard': 0xf74a59
};
difficultyButton.tint = colors[self.selectedDifficulty];
}
// Language selection - only store in storage, no UI in start screen
self.selectedLanguage = storage.language || 'turkish';
// Settings button event - show settings screen
settingsButton.down = function (x, y, obj) {
var settingsScreen = game.addChild(new SettingsScreen(self));
};
// How to play button event - show how to play screen
howToPlayButton.down = function (x, y, obj) {
var howToPlayScreen = game.addChild(new HowToPlayScreen());
};
// Difficulty button event - cycle through difficulties
difficultyButton.down = function (x, y, obj) {
var difficulties = ['easy', 'normal', 'hard'];
var currentIndex = difficulties.indexOf(self.selectedDifficulty);
self.selectedDifficulty = difficulties[(currentIndex + 1) % difficulties.length];
updateDifficultyDisplay();
};
// Add updateLanguage method for direct updates
self.updateLanguage = function () {
var texts = languageTexts[currentLanguage];
if (self.titleText) {
self.titleText.setText(texts.gameTitle);
}
if (self.subtitleText) {
self.subtitleText.setText(texts.gameSubtitle);
}
if (self.startButtonText) {
self.startButtonText.setText(texts.start);
}
if (self.settingsText) {
self.settingsText.setText(texts.settings);
}
if (self.howToPlayText) {
self.howToPlayText.setText(texts.howToPlay);
}
if (self.difficultyText) {
var difficultyDisplayText = self.selectedDifficulty === 'easy' ? texts.easy : self.selectedDifficulty === 'hard' ? texts.hard : texts.normal;
self.difficultyText.setText(texts.difficulty + difficultyDisplayText);
}
};
// Start button event
startButton.down = function (x, y, obj) {
gameDifficulty = self.selectedDifficulty;
startGame();
self.destroy();
};
return self;
});
var HowToPlayScreen = Container.expand(function () {
var self = Container.call(this);
// Full screen opaque background
var howToPlayBg = self.attachAsset('startBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
scaleX: 1.0,
scaleY: 1.0
});
howToPlayBg.tint = 0x000000;
howToPlayBg.alpha = 1.0;
// Block all clicks on background
howToPlayBg.down = function (x, y, obj) {
// Block clicks from going through
};
// Get current language texts
var texts = languageTexts[currentLanguage];
// How to play title
var titleText = new Text2(texts.howToPlayTitle, {
size: 180,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 350;
self.addChild(titleText);
// How to play content text
var contentText = new Text2(texts.howToPlayText, {
size: 55,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
contentText.anchor.set(0.5, 0.5);
contentText.x = 1024;
contentText.y = 1400;
self.addChild(contentText);
// Back button (top right)
var backButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1800,
y: 200,
scaleX: 2.0,
scaleY: 1.5
}));
backButton.tint = 0xFF4444;
var backText = new Text2(texts.back, {
size: 60,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
backText.anchor.set(0.5, 0.5);
backText.x = 1800;
backText.y = 200;
self.addChild(backText);
// Back button event
backButton.down = function (x, y, obj) {
self.destroy();
};
return self;
});
var MedicationButton = Container.expand(function (type) {
var self = Container.call(this);
self.type = type;
var buttonGraphics = self.attachAsset(type === 'regular' ? 'regularPill' : 'greenSubstance', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
if (selectedCustomer && !selectedCustomer.served) {
if (self.type === 'regular') {
selectedCustomer.serveRegular();
} else {
selectedCustomer.serveEnhanced();
}
selectedCustomer = null;
updateCustomerInfo();
}
};
return self;
});
var SettingsScreen = Container.expand(function (parentScreen) {
var self = Container.call(this);
// Settings background - covers entire screen and blocks clicks
var settingsBg = self.attachAsset('startBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
scaleX: 0.1,
scaleY: 0.1
});
settingsBg.tint = 0x000000;
settingsBg.alpha = 0.0;
// Animate settings screen opening
tween(settingsBg, {
scaleX: 1.0,
scaleY: 1.0,
alpha: 1.0
}, {
duration: 300,
easing: tween.easeOut
});
// Add click handler to background to prevent clicks from going through
settingsBg.down = function (x, y, obj) {
// Do nothing - this blocks clicks from reaching other elements
};
// Settings title
var titleText = new Text2('AYARLAR', {
size: 200,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 400;
self.addChild(titleText);
// Volume label
var volumeLabel = new Text2('SES SEVİYESİ', {
size: 100,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
volumeLabel.anchor.set(0.5, 0.5);
volumeLabel.x = 1024;
volumeLabel.y = 800;
self.addChild(volumeLabel);
// Current volume (convert from 0-1 to 0-100 in steps of 10)
var currentVolumeFloat = storage.volume;
var currentVolumeStep = Math.round(currentVolumeFloat * 10) * 10;
// Get current language texts for initialization
var texts = languageTexts[currentLanguage];
// Settings title - update with current language
titleText.setText(texts.settings);
// Volume label - update with current language
volumeLabel.setText(texts.volumeLevel);
// Language label
var languageLabel = new Text2(texts.languageSelection, {
size: 100,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
languageLabel.anchor.set(0.5, 0.5);
languageLabel.x = 1024;
languageLabel.y = 1400;
self.addChild(languageLabel);
// Left arrow button for language
var languageLeftArrow = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 600,
y: 1600,
scaleX: 1.5,
scaleY: 1.5
}));
languageLeftArrow.tint = 0x9932CC;
var languageLeftArrowText = new Text2('<', {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
languageLeftArrowText.anchor.set(0.5, 0.5);
languageLeftArrowText.x = 600;
languageLeftArrowText.y = 1600;
self.addChild(languageLeftArrowText);
// Language display
var languageDisplayText = new Text2('TÜRKÇE', {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
languageDisplayText.anchor.set(0.5, 0.5);
languageDisplayText.x = 1024;
languageDisplayText.y = 1600;
self.addChild(languageDisplayText);
// Right arrow button for language
var languageRightArrow = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1450,
y: 1600,
scaleX: 1.5,
scaleY: 1.5
}));
languageRightArrow.tint = 0x9932CC;
var languageRightArrowText = new Text2('>', {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
languageRightArrowText.anchor.set(0.5, 0.5);
languageRightArrowText.x = 1450;
languageRightArrowText.y = 1600;
self.addChild(languageRightArrowText);
// Update language display function
function updateLanguageDisplay() {
var languageNames = {
'turkish': 'TÜRKÇE',
'english': 'ENGLISH',
'french': 'FRANÇAIS',
'korean': '한국어',
'italian': 'ITALIANO',
'german': 'DEUTSCH',
'russian': 'РУССКИЙ',
'pirate': 'PIRATE'
};
languageDisplayText.setText(languageNames[currentLanguage]);
}
// Initialize language display
updateLanguageDisplay();
// Left arrow button
var leftArrow = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 724,
y: 1000,
scaleX: 1.5,
scaleY: 1.5
}));
leftArrow.tint = 0x4169e1;
var leftArrowText = new Text2('<', {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
leftArrowText.anchor.set(0.5, 0.5);
leftArrowText.x = 724;
leftArrowText.y = 1000;
self.addChild(leftArrowText);
// Volume display
var volumeText = new Text2(currentVolumeStep + '%', {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
volumeText.anchor.set(0.5, 0.5);
volumeText.x = 1024;
volumeText.y = 1000;
self.addChild(volumeText);
// Right arrow button
var rightArrow = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1324,
y: 1000,
scaleX: 1.5,
scaleY: 1.5
}));
rightArrow.tint = 0x4169e1;
var rightArrowText = new Text2('>', {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
rightArrowText.anchor.set(0.5, 0.5);
rightArrowText.x = 1324;
rightArrowText.y = 1000;
self.addChild(rightArrowText);
// Back button (top right)
var backButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1800,
y: 200,
scaleX: 2.0,
scaleY: 1.5
}));
backButton.tint = 0xFF4444;
var backText = new Text2(texts.back, {
size: 60,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
backText.anchor.set(0.5, 0.5);
backText.x = 1800;
backText.y = 200;
self.addChild(backText);
// Update volume function
function updateVolume(volumeStep) {
currentVolumeStep = Math.max(0, Math.min(100, volumeStep));
currentVolumeFloat = currentVolumeStep / 100;
volumeText.setText(currentVolumeStep + '%');
// Save volume to storage
storage.volume = currentVolumeFloat;
// Ensure storage persistence
storage = LK.import('@upit/storage.v1', storage);
// Apply volume to all sounds
LK.getSound('cashRegister').volume = currentVolumeFloat;
LK.getSound('warning').volume = currentVolumeFloat;
LK.getSound('customerArrival').volume = currentVolumeFloat;
// Apply volume to music - stop current music but don't play new music during settings adjustment
LK.stopMusic();
}
// Arrow button events
leftArrow.down = function (x, y, obj) {
if (currentVolumeStep > 0) {
updateVolume(currentVolumeStep - 10);
}
};
rightArrow.down = function (x, y, obj) {
if (currentVolumeStep < 100) {
updateVolume(currentVolumeStep + 10);
}
};
// Language arrow button events
languageLeftArrow.down = function (x, y, obj) {
var languages = ['turkish', 'english', 'french', 'korean', 'italian', 'german', 'russian', 'pirate'];
var currentIndex = languages.indexOf(currentLanguage);
var newIndex = (currentIndex - 1 + languages.length) % languages.length;
// Update global currentLanguage variable
currentLanguage = languages[newIndex];
storage.language = currentLanguage;
// Ensure storage persistence
storage = LK.import('@upit/storage.v1', storage);
updateLanguageDisplay();
updateAllLanguageTexts(); // Apply language change to all game text
// Update settings screen text immediately
var texts = languageTexts[currentLanguage];
titleText.setText(texts.settings);
volumeLabel.setText(texts.volumeLevel);
languageLabel.setText(texts.languageSelection);
backText.setText(texts.back);
};
languageRightArrow.down = function (x, y, obj) {
var languages = ['turkish', 'english', 'french', 'korean', 'italian', 'german', 'russian', 'pirate'];
var currentIndex = languages.indexOf(currentLanguage);
var newIndex = (currentIndex + 1) % languages.length;
// Update global currentLanguage variable
currentLanguage = languages[newIndex];
storage.language = currentLanguage;
// Ensure storage persistence
storage = LK.import('@upit/storage.v1', storage);
updateLanguageDisplay();
updateAllLanguageTexts(); // Apply language change to all game text
// Update settings screen text immediately
var texts = languageTexts[currentLanguage];
titleText.setText(texts.settings);
volumeLabel.setText(texts.volumeLevel);
languageLabel.setText(texts.languageSelection);
backText.setText(texts.back);
};
// Back button event
backButton.down = function (x, y, obj) {
self.destroy();
};
return self;
});
var SpecialUpgradeMenu = Container.expand(function () {
var self = Container.call(this);
// Available addons with descriptions and effects
var availableAddons = currentLanguage === 'turkish' ? [{
name: 'Para Şansı',
description: 'Random -500 ila +500 para',
apply: function apply() {
var randomMoney = Math.floor(Math.random() * 1001) - 500;
money += randomMoney;
}
}, {
name: 'Roll Hediyesi',
description: '3 roll hakkı kazanın',
apply: function apply() {
rollRights += 3;
}
}, {
name: 'Süper Yükseltme',
description: 'Tüm upgradeler +1 (kapasite hariç)',
apply: function apply() {
regularUpgradeLevel++;
regularUpgradeBonus += 5;
enhancedUpgradeLevel++;
enhancedMultiplier += 0.2;
customerSpeedUpgrade++;
}
}, {
name: 'Zaman Uzatma',
description: 'Sonraki günler 10sn uzar',
apply: function apply() {
dayLength += 600; // 10 seconds = 600 ticks
}
}, {
name: 'Çift İlaç Müşteri',
description: 'Çift ilaç alan müşteriler gelir',
apply: function apply() {
doubleCustomersActive = true;
}
}, {
name: 'VIP Müşteriler',
description: 'VIP müşteriler 2x para kazandırır',
apply: function apply() {
vipCustomersActive = true;
}
}, {
name: 'Regular Bonusu',
description: 'Regular ilaçlar %15 şansla enhanced fiyatı',
apply: function apply() {
regularEnhancedChance = true;
}
}, {
name: 'Enhanced Bonusu',
description: 'Enhanced ilaçlar %15 şansla 2x gelir',
apply: function apply() {
enhancedDoubleChance = true;
}
}, {
name: 'Müşteri Bonusu',
description: 'Gün sonunda müşteri başına $20',
apply: function apply() {
customerEndBonus = true;
}
}, {
name: 'Çift Kazanç',
description: 'Sonraki 2 gün 2x para',
apply: function apply() {
doubleMoneyDays = 2;
}
}, {
name: 'Risk Dengeleme',
description: '1.5x gelir ama %30 az sabır',
apply: function apply() {
riskBalanceActive = true;
}
}, {
name: 'Enhanced Odak',
description: 'Enhanced 2x kazanç ama regular 0',
apply: function apply() {
enhancedFocusActive = true;
}
}] : [{
name: 'Money Chance',
description: 'Random -500 to +500 money',
apply: function apply() {
var randomMoney = Math.floor(Math.random() * 1001) - 500;
money += randomMoney;
}
}, {
name: 'Roll Gift',
description: 'Gain 3 roll rights',
apply: function apply() {
rollRights += 3;
}
}, {
name: 'Super Upgrade',
description: 'All upgrades +1 (except capacity)',
apply: function apply() {
regularUpgradeLevel++;
regularUpgradeBonus += 5;
enhancedUpgradeLevel++;
enhancedMultiplier += 0.2;
customerSpeedUpgrade++;
}
}, {
name: 'Time Extension',
description: 'Next days last 10s longer',
apply: function apply() {
dayLength += 600; // 10 seconds = 600 ticks
}
}, {
name: 'Double Medicine Customer',
description: 'Customers needing double medicine appear',
apply: function apply() {
doubleCustomersActive = true;
}
}, {
name: 'VIP Customers',
description: 'VIP customers give 2x money',
apply: function apply() {
vipCustomersActive = true;
}
}, {
name: 'Regular Bonus',
description: 'Regular medicine 15% chance enhanced price',
apply: function apply() {
regularEnhancedChance = true;
}
}, {
name: 'Enhanced Bonus',
description: 'Enhanced medicine 15% chance 2x income',
apply: function apply() {
enhancedDoubleChance = true;
}
}, {
name: 'Customer Bonus',
description: '$20 per customer at day end',
apply: function apply() {
customerEndBonus = true;
}
}, {
name: 'Double Income',
description: 'Next 2 days 2x money',
apply: function apply() {
doubleMoneyDays = 2;
}
}, {
name: 'Risk Balance',
description: '1.5x income but 30% less patience',
apply: function apply() {
riskBalanceActive = true;
}
}, {
name: 'Enhanced Focus',
description: 'Enhanced 2x income but regular 0',
apply: function apply() {
enhancedFocusActive = true;
}
}];
// Function to get random addon excluding already selected ones
function getRandomAddon(excludeAddons) {
var availableChoices = availableAddons.filter(function (addon) {
return excludeAddons.indexOf(addon) === -1 && selectedAddonNames.indexOf(addon.name) === -1;
});
if (availableChoices.length === 0) {
availableChoices = availableAddons.slice(); // fallback to all addons
}
return availableChoices[Math.floor(Math.random() * availableChoices.length)];
}
// Menu background - covers entire screen
var menuBg = self.attachAsset('pharmacyBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
scaleX: 1.0,
scaleY: 1.0
});
menuBg.tint = 0x000000;
menuBg.alpha = 0.95;
// Menu title
var texts = languageTexts[currentLanguage];
var titleText = new Text2(texts.specialAddonSelection, {
size: 120,
fill: 0xFFD700,
font: 'Comic Sans MS'
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 300;
self.addChild(titleText);
// Money display
var moneyDisplayText = new Text2(texts.money + money, {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
moneyDisplayText.anchor.set(0.5, 0.5);
moneyDisplayText.x = 1024;
moneyDisplayText.y = 400;
self.addChild(moneyDisplayText);
// Roll rights display
var rollDisplayText = new Text2(texts.rollRights + rollRights, {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
rollDisplayText.anchor.set(0.5, 0.5);
rollDisplayText.x = 1024;
rollDisplayText.y = 480;
self.addChild(rollDisplayText);
// Select 3 random addons excluding already selected ones
var selectedAddons = [];
var availableForSelection = availableAddons.filter(function (addon) {
return selectedAddonNames.indexOf(addon.name) === -1;
});
// If we don't have enough unselected addons, include some selected ones
if (availableForSelection.length < 3) {
availableForSelection = availableAddons.slice();
}
var shuffledAddons = availableForSelection.slice();
// Simple shuffle
for (var i = shuffledAddons.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = shuffledAddons[i];
shuffledAddons[i] = shuffledAddons[j];
shuffledAddons[j] = temp;
}
selectedAddons = shuffledAddons.slice(0, 3);
// Create addon buttons
var addonButtons = [];
var addonTexts = [];
var rollButtons = [];
for (var i = 0; i < 3; i++) {
var addon = selectedAddons[i];
var yPos = 1000 + i * 600;
// Addon button
var addonButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 900,
y: yPos,
scaleX: 6.0,
scaleY: 5.0
}));
addonButton.tint = 0x9932CC;
// Addon text
var addonText = new Text2(addon.name + '\n' + addon.description, {
size: 65,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
addonText.anchor.set(0.5, 0.5);
addonText.x = 900;
addonText.y = yPos;
self.addChild(addonText);
// Roll button
var rollButton = self.addChild(LK.getAsset('rollButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1850,
y: yPos,
scaleX: 2.5,
scaleY: 2.5
}));
// Roll button text
var rollButtonText = new Text2(texts.rollDice, {
size: 65,
fill: 0x000000,
font: 'Comic Sans MS'
});
rollButtonText.anchor.set(0.5, 0.5);
rollButtonText.x = 1850;
rollButtonText.y = yPos;
self.addChild(rollButtonText);
// Store references
addonButtons.push(addonButton);
addonTexts.push(addonText);
rollButtons.push(rollButton);
// Add click handler - store addon reference directly on button
addonButton.selectedAddon = addon;
addonButton.down = function (x, y, obj) {
var selectedAddon = this.selectedAddon;
var confirmDialog = game.addChild(new ConfirmationDialog(selectedAddon.name + '\n' + selectedAddon.description, 0, function () {
selectedAddon.apply();
// Track this addon as selected
if (selectedAddonNames.indexOf(selectedAddon.name) === -1) {
selectedAddonNames.push(selectedAddon.name);
}
updateUI();
regularLabel.setText('Normal ($' + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
enhancedLabel.setText('Geliştirilmiş (' + enhancedMultiplier.toFixed(1) + 'x kâr)');
capacityText2.setText('Kapasite: ' + pharmacyCapacity);
self.destroy();
// Show end of day menu after addon selection
if (!endOfDayMenu) {
endOfDayMenu = game.addChild(new EndOfDayMenu());
}
}));
};
// Roll button click handler
rollButton.addonIndex = i;
rollButton.down = function (x, y, obj) {
if (rollRights > 0) {
rollRights--;
var texts = languageTexts[currentLanguage];
rollRightsText.setText(texts.rollRights + rollRights);
rollDisplayText.setText(texts.rollRights + rollRights);
var index = this.addonIndex;
// Get new random addon excluding currently selected ones
var newAddon = getRandomAddon(selectedAddons);
selectedAddons[index] = newAddon;
addonButtons[index].selectedAddon = newAddon;
addonTexts[index].setText(newAddon.name + '\n' + newAddon.description);
}
};
}
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xf0f8ff
});
/****
* Game Code
****/
// Game variables
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _defineProperty(e, r, t) {
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
value: t,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[r] = t, e;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) {
return t;
}
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) {
return i;
}
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
var money = 0;
var day = 1;
var pharmacyCapacity = 1;
var penalties = 0;
var customers = [];
var selectedCustomer = null;
var dayTimer = 0;
var dayLength = 1800; // 30 seconds per day
var customersServedToday = 0;
var customersNeededToday = Math.floor(Math.random() * 7) + 2;
var endOfDayMenu = null;
var gameRunning = false;
var gameStarted = false;
var regularUpgradeBonus = 0;
var enhancedMultiplier = 1.5;
var customerSpeedUpgrade = 0;
var gameDifficulty = 'normal'; // Default difficulty
var regularUpgradeLevel = 1;
var enhancedUpgradeLevel = 1;
var rollRights = 3;
// New addon variables
var doubleCustomersActive = false;
var vipCustomersActive = false;
var regularEnhancedChance = false;
var enhancedDoubleChance = false;
var customerEndBonus = false;
var doubleMoneyDays = 0;
var riskBalanceActive = false;
var enhancedFocusActive = false;
// Track selected addons to prevent re-selection
var selectedAddonNames = [];
// Language system - use stored language or default to Turkish
var currentLanguage = storage.language || 'turkish';
storage.language = currentLanguage;
// Language texts
var languageTexts = _defineProperty(_defineProperty(_defineProperty(_defineProperty({
turkish: {
money: 'Para: $',
day: 'Gün ',
time: 'Zaman: ',
capacity: 'Kapasite: ',
rollRights: 'Zar Hakları: ',
mode: 'Mod: ',
clickCustomer: 'Ayrıntıları görmek için bir müşteriye tıklayın',
regularMedicine: 'Normal ($',
enhancedMedicine: 'Geliştirilmiş (',
profit: 'x kâr)',
gameTitle: 'Eczaneciler Kralı',
gameSubtitle: 'Eczanenizi yönetin \nve müşterilerinize hizmet verin!',
start: 'BAŞLAT',
settings: 'AYARLAR',
howToPlay: 'NASIL OYNANIR',
difficulty: 'ZORLUK: ',
easy: 'KOLAY',
normal: 'ORTA',
hard: 'ZOR',
back: 'GERİ',
volumeLevel: 'SES SEVİYESİ',
languageSelection: 'DİL SEÇİMİ',
yes: 'EVET',
no: 'HAYIR',
dayComplete: 'Gün {day} Tamamlandı!',
totalMoney: 'Toplam Para: $',
capacityUpgrade: 'Kapasite\nYükseltmesi\n$',
regularUpgrade: 'Normal\nYükseltmesi\n$',
enhancedUpgrade: 'Geliştirilmiş\nYükseltmesi\n$',
customerSpeedUpgrade: 'Müşteri Hızı\nYükseltmesi\n$',
nextDay: 'Sonraki Gün',
specialAddonSelection: 'Özel Eklenti Seçimi!',
rollDice: 'Zarla',
upgradeQuestion: 'Yükseltmek ister misin?',
addonQuestion: 'Bu eklentiyi seçmek istiyor musun?',
cost: 'Maliyet: $',
howToPlayTitle: 'NASIL OYNANIR',
howToPlayText: 'OYUN AMACI:\nEczanenizi yöneterek para kazanın ve 10.000$\'a ulaşın!\n\nMÜŞTERİLER:\n• Müşterilere tıklayarak bilgilerini görün\n• Normal ilaç: Güvenli ama az para\n• Geliştirilmiş ilaç: Riskli ama çok para\n\nMÜŞTERİ TİPLERİ:\n• Şüpheli: Geliştirilmiş ilaç ister, normal ilaç verirsen ceza\n• Güvenilir: %70 olasılıkla güvenebilirsin\n• Güvenilir olmayan: %30 olasılıkla güvenebilirsin\n• VIP: 2x para kazandırır\n\nYÜKSELTMELER:\n• Kapasite: Daha fazla müşteri\n• Normal ilaç: Daha fazla kazanç\n• Geliştirilmiş ilaç: Daha yüksek çarpan\n• Müşteri hızı: Daha hızlı müşteri gelişi\n\nÖZEL EKLENTİLER:\nBelirli günlerde özel yetenekler kazanabilirsiniz!'
},
english: {
money: 'Money: $',
day: 'Day ',
time: 'Time: ',
capacity: 'Capacity: ',
rollRights: 'Roll Rights: ',
mode: 'Mode: ',
clickCustomer: 'Click on a customer to see details',
regularMedicine: 'Regular ($',
enhancedMedicine: 'Enhanced (',
profit: 'x profit)',
gameTitle: 'Pharmacy King',
gameSubtitle: 'Manage your pharmacy \nand serve your customers!',
start: 'START',
settings: 'SETTINGS',
howToPlay: 'HOW TO PLAY',
difficulty: 'DIFFICULTY: ',
easy: 'EASY',
normal: 'NORMAL',
hard: 'HARD',
back: 'BACK',
volumeLevel: 'VOLUME LEVEL',
languageSelection: 'LANGUAGE SELECTION',
yes: 'YES',
no: 'NO',
dayComplete: 'Day {day} Complete!',
totalMoney: 'Total Money: $',
capacityUpgrade: 'Capacity\nUpgrade\n$',
regularUpgrade: 'Regular\nUpgrade\n$',
enhancedUpgrade: 'Enhanced\nUpgrade\n$',
customerSpeedUpgrade: 'Customer Speed\nUpgrade\n$',
nextDay: 'Next Day',
specialAddonSelection: 'Special Addon Selection!',
rollDice: 'Roll',
upgradeQuestion: 'Do you want to upgrade?',
addonQuestion: 'Do you want to select this addon?',
cost: 'Cost: $',
howToPlayTitle: 'HOW TO PLAY',
howToPlayText: 'GAME OBJECTIVE:\nManage your pharmacy to earn money and reach $10,000!\n\nCUSTOMERS:\n• Click on customers to see their details\n• Regular medicine: Safe but less money\n• Enhanced medicine: Risky but more money\n\nCUSTOMER TYPES:\n• Suspicious: Wants enhanced medicine, penalty for regular\n• Trustworthy: You can trust them 70% of the time\n• Untrustworthy: You can trust them 30% of the time\n• VIP: Gives 2x money\n\nUPGRADES:\n• Capacity: More customers at once\n• Regular medicine: Higher earnings\n• Enhanced medicine: Higher multiplier\n• Customer speed: Faster customer arrivals\n\nSPECIAL ADDONS:\nOn certain days you can gain special abilities!'
},
french: {
money: 'Argent: $',
day: 'Jour ',
time: 'Temps: ',
capacity: 'Capacité: ',
rollRights: 'Droits de Lancer: ',
mode: 'Mode: ',
clickCustomer: 'Cliquez sur un client pour voir les détails',
regularMedicine: 'Régulier ($',
enhancedMedicine: 'Amélioré (',
profit: 'x profit)',
gameTitle: 'Roi de la Pharmacie',
gameSubtitle: 'Gérez votre pharmacie \net servez vos clients!',
start: 'COMMENCER',
settings: 'PARAMÈTRES',
howToPlay: 'COMMENT JOUER',
difficulty: 'DIFFICULTÉ: ',
easy: 'FACILE',
normal: 'NORMAL',
hard: 'DIFFICILE',
back: 'RETOUR',
volumeLevel: 'NIVEAU DE VOLUME',
languageSelection: 'SÉLECTION DE LANGUE',
yes: 'OUI',
no: 'NON',
dayComplete: 'Jour {day} Terminé!',
totalMoney: 'Argent Total: $',
capacityUpgrade: 'Amélioration\nde Capacité\n$',
regularUpgrade: 'Amélioration\nRégulière\n$',
enhancedUpgrade: 'Amélioration\nAméliorée\n$',
customerSpeedUpgrade: 'Amélioration\nVitesse Client\n$',
nextDay: 'Jour Suivant',
specialAddonSelection: 'Sélection d\'Extension Spéciale!',
rollDice: 'Lancer',
upgradeQuestion: 'Voulez-vous améliorer?',
addonQuestion: 'Voulez-vous sélectionner cette extension?',
cost: 'Coût: $',
howToPlayTitle: 'COMMENT JOUER',
howToPlayText: 'OBJECTIF DU JEU:\nGérez votre pharmacie pour gagner de l\'argent et atteindre 10 000$!\n\nCLIENTS:\n• Cliquez sur les clients pour voir leurs détails\n• Médicament régulier: Sûr mais moins d\'argent\n• Médicament amélioré: Risqué mais plus d\'argent\n\nTYPES DE CLIENTS:\n• Suspect: Veut des médicaments améliorés, pénalité pour régulier\n• Digne de confiance: Vous pouvez leur faire confiance 70% du temps\n• Pas digne de confiance: Vous pouvez leur faire confiance 30% du temps\n• VIP: Donne 2x l\'argent\n\nAMÉLIORATIONS:\n• Capacité: Plus de clients à la fois\n• Médicament régulier: Gains plus élevés\n• Médicament amélioré: Multiplicateur plus élevé\n• Vitesse client: Arrivées de clients plus rapides\n\nEXTENSIONS SPÉCIALES:\nCertains jours, vous pouvez obtenir des capacités spéciales!'
},
korean: {
money: '돈: $',
day: '날 ',
time: '시간: ',
capacity: '용량: ',
rollRights: '주사위 권리: ',
mode: '모드: ',
clickCustomer: '자세한 내용을 보려면 고객을 클릭하세요',
regularMedicine: '일반 ($',
enhancedMedicine: '향상된 (',
profit: 'x 이익)',
gameTitle: '약국의 왕',
gameSubtitle: '당신의 약국을 관리하고 \n고객들에게 서비스를 제공하세요!',
start: '시작',
settings: '설정',
howToPlay: '게임 방법',
difficulty: '난이도: ',
easy: '쉬움',
normal: '보통',
hard: '어려움',
back: '뒤로',
volumeLevel: '볼륨 레벨',
languageSelection: '언어 선택',
yes: '네',
no: '아니오',
dayComplete: '날 {day} 완료!',
totalMoney: '총 돈: $',
capacityUpgrade: '용량\n업그레이드\n$',
regularUpgrade: '일반\n업그레이드\n$',
enhancedUpgrade: '향상된\n업그레이드\n$',
customerSpeedUpgrade: '고객 속도\n업그레이드\n$',
nextDay: '다음 날',
specialAddonSelection: '특별 애드온 선택!',
rollDice: '굴리기',
upgradeQuestion: '업그레이드 하시겠습니까?',
addonQuestion: '이 애드온을 선택하시겠습니까?',
cost: '비용: $',
howToPlayTitle: '게임 방법',
howToPlayText: '게임 목표:\n약국을 관리하여 돈을 벌고 $10,000에 도달하세요!\n\n고객:\n• 고객을 클릭하여 세부 정보 확인\n• 일반 약물: 안전하지만 적은 돈\n• 향상된 약물: 위험하지만 많은 돈\n\n고객 유형:\n• 의심스러운: 향상된 약물을 원함, 일반 약물 시 처벌\n• 신뢰할 만한: 70% 확률로 신뢰할 수 있습니다\n• 신뢰할 수 없는: 30% 확률로 신뢰할 수 있습니다\n• VIP: 2배 돈 제공\n\n업그레이드:\n• 용량: 더 많은 고객 동시 수용\n• 일반 약물: 더 높은 수익\n• 향상된 약물: 더 높은 배수\n• 고객 속도: 더 빠른 고객 도착\n\n특별 애드온:\n특정 날에 특별한 능력을 얻을 수 있습니다!'
},
italian: {
money: 'Denaro: $',
day: 'Giorno ',
time: 'Tempo: ',
capacity: 'Capacità: ',
rollRights: 'Diritti di Lancio: ',
mode: 'Modalità: ',
clickCustomer: 'Clicca su un cliente per vedere i dettagli',
regularMedicine: 'Regolare ($',
enhancedMedicine: 'Potenziato (',
profit: 'x profitto)',
gameTitle: 'Re della Farmacia',
gameSubtitle: 'Gestisci la tua farmacia \ne servi i tuoi clienti!',
start: 'INIZIA',
settings: 'IMPOSTAZIONI',
difficulty: 'DIFFICOLTÀ: ',
easy: 'FACILE',
normal: 'NORMALE',
hard: 'DIFFICILE',
back: 'INDIETRO',
volumeLevel: 'LIVELLO VOLUME',
languageSelection: 'SELEZIONE LINGUA',
yes: 'SÌ',
no: 'NO',
dayComplete: 'Giorno {day} Completato!',
totalMoney: 'Denaro Totale: $',
capacityUpgrade: 'Potenziamento\nCapacità\n$',
regularUpgrade: 'Potenziamento\nRegolare\n$',
enhancedUpgrade: 'Potenziamento\nAvanzato\n$',
customerSpeedUpgrade: 'Potenziamento\nVelocità Cliente\n$',
nextDay: 'Giorno Successivo',
specialAddonSelection: 'Selezione Addon Speciale!',
rollDice: 'Lancia',
upgradeQuestion: 'Vuoi potenziare?',
addonQuestion: 'Vuoi selezionare questo addon?',
cost: 'Costo: $'
},
german: {
money: 'Geld: $',
day: 'Tag ',
time: 'Zeit: ',
capacity: 'Kapazität: ',
rollRights: 'Würfelrechte: ',
mode: 'Modus: ',
clickCustomer: 'Klicken Sie auf einen Kunden für Details',
regularMedicine: 'Normal ($',
enhancedMedicine: 'Verstärkt (',
profit: 'x Gewinn)',
gameTitle: 'Apotheken König',
gameSubtitle: 'Verwalten Sie Ihre Apotheke \nund bedienen Sie Ihre Kunden!',
start: 'START',
settings: 'EINSTELLUNGEN',
difficulty: 'SCHWIERIGKEIT: ',
easy: 'EINFACH',
normal: 'NORMAL',
hard: 'SCHWER',
back: 'ZURÜCK',
volumeLevel: 'LAUTSTÄRKE',
languageSelection: 'SPRACHAUSWAHL',
yes: 'JA',
no: 'NEIN',
dayComplete: 'Tag {day} Abgeschlossen!',
totalMoney: 'Gesamtgeld: $',
capacityUpgrade: 'Kapazitäts\nUpgrade\n$',
regularUpgrade: 'Normal\nUpgrade\n$',
enhancedUpgrade: 'Verstärkt\nUpgrade\n$',
customerSpeedUpgrade: 'Kundengeschwindigkeit\nUpgrade\n$',
nextDay: 'Nächster Tag',
specialAddonSelection: 'Spezielle Addon-Auswahl!',
rollDice: 'Würfeln',
upgradeQuestion: 'Möchten Sie upgraden?',
addonQuestion: 'Möchten Sie dieses Addon auswählen?',
cost: 'Kosten: $'
},
russian: {
money: 'Деньги: $',
day: 'День ',
time: 'Время: ',
capacity: 'Вместимость: ',
rollRights: 'Права на Бросок: ',
mode: 'Режим: ',
clickCustomer: 'Нажмите на клиента для подробностей',
regularMedicine: 'Обычное ($',
enhancedMedicine: 'Усиленное (',
profit: 'x прибыль)',
gameTitle: 'Король Аптек',
gameSubtitle: 'Управляйте своей аптекой \nи обслуживайте клиентов!',
start: 'НАЧАТЬ',
settings: 'НАСТРОЙКИ',
difficulty: 'СЛОЖНОСТЬ: ',
easy: 'ЛЕГКО',
normal: 'НОРМАЛЬНО',
hard: 'СЛОЖНО',
back: 'НАЗАД',
volumeLevel: 'УРОВЕНЬ ГРОМКОСТИ',
languageSelection: 'ВЫБОР ЯЗЫКА',
yes: 'ДА',
no: 'НЕТ',
dayComplete: 'День {day} Завершен!',
totalMoney: 'Общие Деньги: $',
capacityUpgrade: 'Улучшение\nВместимости\n$',
regularUpgrade: 'Обычное\nУлучшение\n$',
enhancedUpgrade: 'Усиленное\nУлучшение\n$',
customerSpeedUpgrade: 'Улучшение\nСкорости Клиентов\n$',
nextDay: 'Следующий День',
specialAddonSelection: 'Выбор Специального Дополнения!',
rollDice: 'Бросить',
upgradeQuestion: 'Хотите улучшить?',
addonQuestion: 'Хотите выбрать это дополнение?',
cost: 'Стоимость: $'
}
}, "italian", {
money: 'Denaro: $',
day: 'Giorno ',
time: 'Tempo: ',
capacity: 'Capacità: ',
rollRights: 'Diritti di Lancio: ',
mode: 'Modalità: ',
clickCustomer: 'Clicca su un cliente per vedere i dettagli',
regularMedicine: 'Regolare ($',
enhancedMedicine: 'Potenziato (',
profit: 'x profitto)',
gameTitle: 'Re della Farmacia',
gameSubtitle: 'Gestisci la tua farmacia \ne servi i tuoi clienti!',
start: 'INIZIA',
settings: 'IMPOSTAZIONI',
howToPlay: 'COME GIOCARE',
difficulty: 'DIFFICOLTÀ: ',
easy: 'FACILE',
normal: 'NORMALE',
hard: 'DIFFICILE',
back: 'INDIETRO',
volumeLevel: 'LIVELLO VOLUME',
languageSelection: 'SELEZIONE LINGUA',
yes: 'SÌ',
no: 'NO',
dayComplete: 'Giorno {day} Completato!',
totalMoney: 'Denaro Totale: $',
capacityUpgrade: 'Potenziamento\nCapacità\n$',
regularUpgrade: 'Potenziamento\nRegolare\n$',
enhancedUpgrade: 'Potenziamento\nAvanzato\n$',
customerSpeedUpgrade: 'Potenziamento\nVelocità Cliente\n$',
nextDay: 'Giorno Successivo',
specialAddonSelection: 'Selezione Addon Speciale!',
rollDice: 'Lancia',
upgradeQuestion: 'Vuoi potenziare?',
addonQuestion: 'Vuoi selezionare questo addon?',
cost: 'Costo: $',
howToPlayTitle: 'COME GIOCARE',
howToPlayText: 'OBIETTIVO DEL GIOCO:\nGestisci la tua farmacia per guadagnare denaro e raggiungere $10,000!\n\nCLIENTI:\n• Clicca sui clienti per vedere i dettagli\n• Medicina regolare: Sicura ma meno denaro\n• Medicina potenziata: Rischiosa ma più denaro\n\nTIPI DI CLIENTI:\n• Sospetto: Vuole medicina potenziata, penalità per regolare\n• Affidabile: Puoi fidarti di loro il 70% delle volte\n• Non affidabile: Puoi fidarti di loro il 30% delle volte\n• VIP: Dà 2x denaro\n\nPOTENZIAMENTI:\n• Capacità: Più clienti contemporaneamente\n• Medicina regolare: Guadagni più alti\n• Medicina potenziata: Moltiplicatore più alto\n• Velocità clienti: Arrivi clienti più veloci\n\nADDON SPECIALI:\nIn certi giorni puoi ottenere abilità speciali!'
}), "german", {
money: 'Geld: $',
day: 'Tag ',
time: 'Zeit: ',
capacity: 'Kapazität: ',
rollRights: 'Würfelrechte: ',
mode: 'Modus: ',
clickCustomer: 'Klicken Sie auf einen Kunden für Details',
regularMedicine: 'Normal ($',
enhancedMedicine: 'Verstärkt (',
profit: 'x Gewinn)',
gameTitle: 'Apotheken König',
gameSubtitle: 'Verwalten Sie Ihre Apotheke \nund bedienen Sie Ihre Kunden!',
start: 'START',
settings: 'EINSTELLUNGEN',
howToPlay: 'SPIELANLEITUNG',
difficulty: 'SCHWIERIGKEIT: ',
easy: 'EINFACH',
normal: 'NORMAL',
hard: 'SCHWER',
back: 'ZURÜCK',
volumeLevel: 'LAUTSTÄRKE',
languageSelection: 'SPRACHAUSWAHL',
yes: 'JA',
no: 'NEIN',
dayComplete: 'Tag {day} Abgeschlossen!',
totalMoney: 'Gesamtgeld: $',
capacityUpgrade: 'Kapazitäts\nUpgrade\n$',
regularUpgrade: 'Normal\nUpgrade\n$',
enhancedUpgrade: 'Verstärkt\nUpgrade\n$',
customerSpeedUpgrade: 'Kundengeschwindigkeit\nUpgrade\n$',
nextDay: 'Nächster Tag',
specialAddonSelection: 'Spezielle Addon-Auswahl!',
rollDice: 'Würfeln',
upgradeQuestion: 'Möchten Sie upgraden?',
addonQuestion: 'Möchten Sie dieses Addon auswählen?',
cost: 'Kosten: $',
howToPlayTitle: 'SPIELANLEITUNG',
howToPlayText: 'SPIELZIEL:\nVerwalten Sie Ihre Apotheke, um Geld zu verdienen und $10,000 zu erreichen!\n\nKUNDEN:\n• Klicken Sie auf Kunden für Details\n• Normale Medizin: Sicher aber weniger Geld\n• Verstärkte Medizin: Riskant aber mehr Geld\n\nKUNDENTYPEN:\n• Verdächtig: Will verstärkte Medizin, Strafe für normale\n• Vertrauenswürdig: Sie können ihnen 70% der Zeit vertrauen\n• Nicht vertrauenswürdig: Sie können ihnen 30% der Zeit vertrauen\n• VIP: Gibt 2x Geld\n\nUPGRADES:\n• Kapazität: Mehr Kunden gleichzeitig\n• Normale Medizin: Höhere Einnahmen\n• Verstärkte Medizin: Höherer Multiplikator\n• Kundengeschwindigkeit: Schnellere Kundenankünfte\n\nSPEZIELLE ADDONS:\nAn bestimmten Tagen können Sie spezielle Fähigkeiten erhalten!'
}), "russian", {
money: 'Деньги: $',
day: 'День ',
time: 'Время: ',
capacity: 'Вместимость: ',
rollRights: 'Права на Бросок: ',
mode: 'Режим: ',
clickCustomer: 'Нажмите на клиента для подробностей',
regularMedicine: 'Обычное ($',
enhancedMedicine: 'Усиленное (',
profit: 'x прибыль)',
gameTitle: 'Король Аптек',
gameSubtitle: 'Управляйте своей аптекой \nи обслуживайте клиентов!',
start: 'НАЧАТЬ',
settings: 'НАСТРОЙКИ',
howToPlay: 'КАК ИГРАТЬ',
difficulty: 'СЛОЖНОСТЬ: ',
easy: 'ЛЕГКО',
normal: 'НОРМАЛЬНО',
hard: 'СЛОЖНО',
back: 'НАЗАД',
volumeLevel: 'УРОВЕНЬ ГРОМКОСТИ',
languageSelection: 'ВЫБОР ЯЗЫКА',
yes: 'ДА',
no: 'НЕТ',
dayComplete: 'День {day} Завершен!',
totalMoney: 'Общие Деньги: $',
capacityUpgrade: 'Улучшение\nВместимости\n$',
regularUpgrade: 'Обычное\nУлучшение\n$',
enhancedUpgrade: 'Усиленное\nУлучшение\n$',
customerSpeedUpgrade: 'Улучшение\nСкорости Клиентов\n$',
nextDay: 'Следующий День',
specialAddonSelection: 'Выбор Специального Дополнения!',
rollDice: 'Бросить',
upgradeQuestion: 'Хотите улучшить?',
addonQuestion: 'Хотите выбрать это дополнение?',
cost: 'Стоимость: $',
howToPlayTitle: 'КАК ИГРАТЬ',
howToPlayText: 'ЦЕЛЬ ИГРЫ:\nУправляйте аптекой, чтобы заработать деньги и достичь $10,000!\n\nКЛИЕНТЫ:\n• Нажимайте на клиентов для просмотра деталей\n• Обычное лекарство: Безопасно, но меньше денег\n• Усиленное лекарство: Рискованно, но больше денег\n\nТИПЫ КЛИЕНТОВ:\n• Подозрительный: Хочет усиленное лекарство, штраф за обычное\n• Надежный: Им можно доверять в 70% случаев\n• Ненадежный: Им можно доверять в 30% случаев\n• VIP: Дает в 2 раза больше денег\n\nУЛУЧШЕНИЯ:\n• Вместимость: Больше клиентов одновременно\n• Обычное лекарство: Больше заработок\n• Усиленное лекарство: Больший множитель\n• Скорость клиентов: Более быстрые прибытия клиентов\n\nСПЕЦИАЛЬНЫЕ ДОПОЛНЕНИЯ:\nВ определенные дни вы можете получить специальные способности!'
}), 'pirate', {
money: 'Altın: $',
day: 'Gün ',
time: 'Vakit: ',
capacity: 'Ambar: ',
rollRights: 'Zar Hakkı: ',
mode: 'Seyir Tarzı: ',
clickCustomer: 'Müşteriye tıkla, sırlarını öğren bre!',
regularMedicine: 'Normal ($',
enhancedMedicine: 'Güçlü (',
profit: 'x ganimet)',
gameTitle: 'Eczane Korsanı',
gameSubtitle: 'Dükkânını döndür \nMüşteriye iksir sat!',
start: 'FIÇILARI GETİR',
settings: 'DÜMEN',
howToPlay: 'NASIL KORSAN OLUNUR',
difficulty: 'ZORLUK: ',
easy: 'KOLAY',
normal: 'ORTA',
hard: 'ZOR',
back: 'GERİ',
volumeLevel: 'SES',
languageSelection: 'LİSAN',
yes: 'AYE',
no: 'NAY',
dayComplete: 'Gün {day} bitti kaptan!',
totalMoney: 'Toplam Ganimet: $',
capacityUpgrade: 'Ambarı büyüt\n$',
regularUpgrade: 'Normali güçlendir\n$',
enhancedUpgrade: 'Kudurt\n$',
customerSpeedUpgrade: 'Müşteriye yelken bas\n$',
nextDay: 'Ertesi Gün',
specialAddonSelection: 'Özel Eklenti Seç Kaptan!',
rollDice: 'Zar Fırlat',
upgradeQuestion: 'Yükseltelim mi bre?',
addonQuestion: 'Bunu alasın mı?',
cost: 'Bedel: $',
howToPlayTitle: 'NASIL KORSAN OLUNUR',
howToPlayText: 'AMAÇ:\nDükkânını yöneterek ganimet topla ve 10,000 altına ulaş bre!\n\nMÜŞTERİLER:\n• Yolculara tıkla, sırlarını öğren\n• Normal iksir: Güvenli ama az altın\n• Güçlü iksir: Tehlikeli ama çok altın\n\nYOLCU ÇEŞİTLERİ:\n• Şüpheli: Güçlü iksir ister, normal verirsen ceza\n• Güvenilir: %70 güvenebilirsin onlara\n• Güvenilir olmayan: %30 güvenebilirsin onlara\n• Şerefli: 2 kat altın verir\n\nGÜÇLENDİRMELER:\n• Ambar: Daha fazla yolcu\n• Normal iksir: Daha çok kazanç\n• Güçlü iksir: Daha yüksek çarpan\n• Yolcu hızı: Daha hızlı müşteri\n\nÖZEL YETENEKLER:\nBelirli günlerde özel güçler kazanırsın kaptan!'
});
// Function to update all UI text based on current language
function updateAllLanguageTexts() {
var texts = languageTexts[currentLanguage];
// Update main game UI
if (moneyText) {
moneyText.setText(texts.money + money);
}
if (dayText) {
dayText.setText(texts.day + day);
}
if (rollRightsText) {
rollRightsText.setText(texts.rollRights + rollRights);
}
if (capacityText2) {
capacityText2.setText(texts.capacity + pharmacyCapacity);
}
if (customerInfoText) {
customerInfoText.setText(texts.clickCustomer);
}
if (regularLabel) {
regularLabel.setText(texts.regularMedicine + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
}
if (enhancedLabel) {
enhancedLabel.setText(texts.enhancedMedicine + enhancedMultiplier.toFixed(1) + texts.profit);
}
// Update medicine button labels
if (regularLabel) {
regularLabel.setText(texts.regularMedicine + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
}
if (enhancedLabel) {
enhancedLabel.setText(texts.enhancedMedicine + enhancedMultiplier.toFixed(1) + texts.profit);
}
// Update mode text
if (modeText) {
var modeDisplayText = gameDifficulty === 'easy' ? texts.easy : gameDifficulty === 'hard' ? texts.hard : texts.normal;
modeText.setText(texts.mode + modeDisplayText);
}
// Update timer text
if (timerText) {
var remainingTime = Math.max(0, Math.ceil((dayLength - dayTimer) / 60));
timerText.setText(texts.time + remainingTime);
}
// Update confirmation dialogs
var confirmationDialogs = game.children.filter(function (child) {
return child.constructor.name === 'ConfirmationDialog';
});
for (var i = 0; i < confirmationDialogs.length; i++) {
if (confirmationDialogs[i].updateLanguage) {
confirmationDialogs[i].updateLanguage();
}
}
// Update settings screen text if it exists
var settingsScreens = game.children.filter(function (child) {
return child.constructor.name === 'SettingsScreen';
});
if (settingsScreens.length > 0) {
var settingsScreen = settingsScreens[0];
// Find and update settings screen text elements
for (var i = 0; i < settingsScreen.children.length; i++) {
var child = settingsScreen.children[i];
if (child.constructor.name === 'Text2') {
// Update settings title
if (child.text.indexOf('AYARLAR') !== -1 || child.text.indexOf('SETTINGS') !== -1) {
child.setText(texts.settings);
}
// Update volume label
else if (child.text.indexOf('SES SEVİYESİ') !== -1 || child.text.indexOf('VOLUME LEVEL') !== -1) {
child.setText(texts.volumeLevel);
}
// Update language label
else if (child.text.indexOf('DİL SEÇİMİ') !== -1 || child.text.indexOf('LANGUAGE SELECTION') !== -1) {
child.setText(texts.languageSelection);
}
// Update back button
else if (child.text.indexOf('GERİ') !== -1 || child.text.indexOf('BACK') !== -1) {
child.setText(texts.back);
}
}
}
}
// Update GameStartScreen text if it exists
for (var i = 0; i < game.children.length; i++) {
var child = game.children[i];
if (child.constructor && child.constructor.name === 'GameStartScreen' && child.updateLanguage && typeof child.updateLanguage === 'function') {
child.updateLanguage();
} else if (child.updateLanguage && typeof child.updateLanguage === 'function') {
child.updateLanguage();
}
}
}
// Add pharmacy background
var pharmacyBg = game.addChild(LK.getAsset('pharmacyBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
}));
// Show start screen
var startScreen = game.addChild(new GameStartScreen());
// UI Elements - hidden initially for start screen
var moneyText = new Text2('Para: $' + money, {
size: 80,
fill: 0x000000,
font: 'Comic Sans MS'
});
moneyText.anchor.set(0, 0);
moneyText.x = 50;
moneyText.y = 50;
moneyText.visible = false;
game.addChild(moneyText);
var rollRightsText = new Text2('Zar Hakları: ' + rollRights, {
size: 90,
fill: 0x000000,
font: 'Comic Sans MS'
});
rollRightsText.anchor.set(0, 0);
rollRightsText.x = 50;
rollRightsText.y = 130;
rollRightsText.visible = false;
game.addChild(rollRightsText);
var dayText = new Text2('Gün ' + day, {
size: 80,
fill: 0x000000,
font: 'Comic Sans MS'
});
dayText.anchor.set(1, 0);
dayText.x = 1998;
dayText.y = 50;
dayText.visible = false;
game.addChild(dayText);
var timerText = new Text2('Zaman: ' + Math.ceil((dayLength - dayTimer) / 60), {
size: 80,
fill: 0x000000,
font: 'Comic Sans MS'
});
timerText.anchor.set(0.5, 0);
timerText.x = 1024;
timerText.y = 50;
timerText.visible = false;
game.addChild(timerText);
var modeText = new Text2('', {
size: 80,
fill: 0x000000,
font: 'Comic Sans MS'
});
modeText.anchor.set(0.5, 0);
modeText.x = 1750; // Positioned between money (50) and timer (1024)
modeText.y = 175;
modeText.visible = false;
game.addChild(modeText);
var capacityText2 = new Text2('Kapasite: ' + pharmacyCapacity, {
size: 80,
fill: 0x000000,
font: 'Comic Sans MS'
});
capacityText2.anchor.set(0.5, 0);
capacityText2.x = 1511; // Positioned between timer (1024) and day (1998)
capacityText2.y = 50;
capacityText2.visible = false;
game.addChild(capacityText2);
var customerInfoText = new Text2('Ayrıntıları görmek için bir müşteriye tıklayın', {
size: 95,
fill: 0x000000,
font: 'Comic Sans MS'
});
customerInfoText.anchor.set(0.5, 0);
customerInfoText.x = 1024;
customerInfoText.y = 300;
customerInfoText.visible = false;
game.addChild(customerInfoText);
// Pharmacy counter - hidden initially
var counter = game.addChild(LK.getAsset('counter', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2500
}));
counter.visible = false;
// Medication buttons - hidden initially
var regularButton = game.addChild(new MedicationButton('regular'));
regularButton.x = 1024;
regularButton.y = 1900;
regularButton.scaleX = 2;
regularButton.scaleY = 2;
regularButton.visible = false;
var enhancedButton = game.addChild(new MedicationButton('enhanced'));
enhancedButton.x = 1024;
enhancedButton.y = 2275;
enhancedButton.scaleX = 2;
enhancedButton.scaleY = 2;
enhancedButton.visible = false;
// Button labels - hidden initially
var regularLabel = new Text2('Normal ($' + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')', {
size: 70,
fill: 0xf70505,
font: 'Comic Sans MS'
});
regularLabel.anchor.set(0.5, 0);
regularLabel.x = 1024;
regularLabel.y = 2017;
regularLabel.visible = false;
game.addChild(regularLabel);
var enhancedLabel = new Text2('Geliştirilmiş (' + enhancedMultiplier.toFixed(1) + 'x kâr)', {
size: 70,
fill: 0x228B22,
font: 'Comic Sans MS'
});
enhancedLabel.anchor.set(0.5, 0);
enhancedLabel.x = 1024;
enhancedLabel.y = 2392;
enhancedLabel.visible = false;
game.addChild(enhancedLabel);
// Define 5 fixed customer spawn positions
var customerSpawnPositions = [{
x: 204,
y: 1760
},
// Position 1
{
x: 614,
y: 1760
},
// Position 2
{
x: 1024,
y: 1760
},
// Position 3 (center)
{
x: 1434,
y: 1760
},
// Position 4
{
x: 1844,
y: 1760
} // Position 5
];
// Functions
function spawnCustomer() {
// Limit to maximum customers based on pharmacy capacity
if (customers.length >= pharmacyCapacity) {
return;
}
// Find available spawn positions
var availablePositions = [];
for (var posIndex = 0; posIndex < customerSpawnPositions.length; posIndex++) {
var position = customerSpawnPositions[posIndex];
var occupied = false;
// Check if this position is already occupied
for (var j = 0; j < customers.length; j++) {
var distance = Math.sqrt(Math.pow(customers[j].x - position.x, 2) + Math.pow(customers[j].y - position.y, 2));
if (distance < 200) {
// Reduced distance threshold since positions are fixed
occupied = true;
break;
}
}
if (!occupied) {
availablePositions.push(position);
}
}
// If no positions available, return
if (availablePositions.length === 0) {
return;
}
// Select random available position
var selectedPosition = availablePositions[Math.floor(Math.random() * availablePositions.length)];
var customer = new Customer();
customer.x = selectedPosition.x;
customer.y = selectedPosition.y;
// Start customer with small scale and fade in
customer.scaleX = 0.1;
customer.scaleY = 0.1;
customer.alpha = 0.0;
// Play customer arrival sound with saved volume
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('customerArrival').volume = savedVolume;
LK.getSound('customerArrival').play();
}
// Animate customer entrance
tween(customer, {
scaleX: 1.0,
scaleY: 1.0,
alpha: 1.0
}, {
duration: 500,
easing: tween.bounceOut
});
customer.down = function (x, y, obj) {
// Add click effect
tween(customer, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(customer, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100,
easing: tween.easeIn
});
}
});
selectedCustomer = customer;
updateCustomerInfo();
};
customers.push(customer);
game.addChild(customer);
}
function updateCustomerInfo() {
var texts = languageTexts[currentLanguage];
if (selectedCustomer && !selectedCustomer.served) {
var info = '';
if (selectedCustomer.isSuspicious) {
var suspiciousTexts = {
'turkish': 'Şüpheli Müşteri\n - Geliştirilmiş ilaçları ister',
'english': 'Suspicious Customer\n - Wants enhanced medicine',
'french': 'Client Suspect\n - Veut des médicaments améliorés',
'korean': '의심스러운 고객\n - 향상된 약을 원함',
'italian': 'Cliente Sospetto\n - Vuole medicina potenziata',
'german': 'Verdächtiger Kunde\n - Will verstärkte Medizin',
'russian': 'Подозрительный Клиент\n - Хочет усиленное лекарство',
'pirate': 'Şüpheli Yolcu\n - Güçlü iksirleri ister bre'
};
info = suspiciousTexts[currentLanguage];
} else {
var typeDescriptions = {
'turkish': {
'customer': 'Normal Yetişkin Bir Müşteri',
'customerElderly': 'Kronik Rahatsızlığı Olan Yaşlı Bir Müşteri',
'customerYoung': 'Küçük Rahatsızlıkları Olan Genç Bir Müşteri',
'customerBusiness': 'Her Zaman Aceleci Bir İş İnsanı',
'vipCustomer': 'VIP Müşteri',
'doubleCustomer': 'Çift hap müşterisi'
},
'english': {
'customer': 'Normal Adult Customer',
'customerElderly': 'Elderly Customer with Chronic Condition',
'customerYoung': 'Young Customer with Minor Issues',
'customerBusiness': 'Always Busy Business Person',
'vipCustomer': 'VIP Customer',
'doubleCustomer': 'Double pill customer'
},
'french': {
'customer': 'Client Adulte Normal',
'customerElderly': 'Client Âgé avec Condition Chronique',
'customerYoung': 'Jeune Client avec Problèmes Mineurs',
'customerBusiness': 'Personne d\'Affaires Toujours Occupée',
'vipCustomer': 'Client VIP',
'doubleCustomer': 'Client à double pilule'
},
'korean': {
'customer': '일반 성인 고객',
'customerElderly': '만성 질환이 있는 노인 고객',
'customerYoung': '가벼운 문제가 있는 젊은 고객',
'customerBusiness': '항상 바쁜 사업가',
'vipCustomer': 'VIP 고객',
'doubleCustomer': '이중 알약 고객'
},
'italian': {
'customer': 'Cliente Adulto Normale',
'customerElderly': 'Cliente Anziano con Condizione Cronica',
'customerYoung': 'Giovane Cliente con Problemi Minori',
'customerBusiness': 'Persona d\'Affari Sempre Occupata',
'vipCustomer': 'Cliente VIP',
'doubleCustomer': 'Cliente doppia pillola'
},
'german': {
'customer': 'Normaler Erwachsener Kunde',
'customerElderly': 'Älterer Kunde mit chronischer Erkrankung',
'customerYoung': 'Junger Kunde mit kleinen Problemen',
'customerBusiness': 'Immer beschäftigter Geschäftsmann',
'vipCustomer': 'VIP Kunde',
'doubleCustomer': 'Doppelpillen-Kunde'
},
'russian': {
'customer': 'Обычный Взрослый Клиент',
'customerElderly': 'Пожилой Клиент с Хроническим Заболеванием',
'customerYoung': 'Молодой Клиент с Мелкими Проблемами',
'customerBusiness': 'Всегда Занятый Деловой Человек',
'vipCustomer': 'VIP Клиент',
'doubleCustomer': 'Клиент с двойными таблетками'
},
'pirate': {
'customer': 'Sıradan yolcu',
'customerElderly': 'Yaşlı tayfa, derdi çok',
'customerYoung': 'Genç tayfa, ufak yaralı',
'customerBusiness': 'Acelecidir bu tüccar',
'vipCustomer': 'Şerefli misafir',
'doubleCustomer': 'Çift hap isteyen yolcu'
}
}[currentLanguage];
var baseDesc = typeDescriptions[selectedCustomer.customerType] || (currentLanguage === 'turkish' ? 'Normal müşteri' : 'Regular customer');
var reportTexts = {
'turkish': selectedCustomer.willReport ? 'Yasadışı Faaliyetleri Bildirebilir!' : 'Güvenilir Görünüyor',
'english': selectedCustomer.willReport ? 'Might Report Illegal Activities!' : 'Looks Trustworthy',
'french': selectedCustomer.willReport ? 'Pourrait Signaler les Activités Illégales!' : 'A l\'air Digne de Confiance',
'korean': selectedCustomer.willReport ? '불법 활동을 신고할 수 있음!' : '신뢰할 만해 보임',
'italian': selectedCustomer.willReport ? 'Potrebbe Segnalare Attività Illegali!' : 'Sembra Affidabile',
'german': selectedCustomer.willReport ? 'Könnte Illegale Aktivitäten Melden!' : 'Sieht Vertrauenswürdig Aus',
'russian': selectedCustomer.willReport ? 'Может Сообщить о Незаконной Деятельности!' : 'Выглядит Надежно',
'pirate': selectedCustomer.willReport ? 'Yasadışı işimizi liman muhafızına ispiyonlayabilir!' : 'Güvenilir görünüyor bre'
};
var reportText = reportTexts[currentLanguage];
info = baseDesc + '\n - ' + reportText;
}
customerInfoText.setText(info);
} else {
customerInfoText.setText(texts.clickCustomer);
}
}
function updateUI() {
var texts = languageTexts[currentLanguage];
moneyText.setText(texts.money + money);
dayText.setText(texts.day + day);
var remainingTime = Math.max(0, Math.ceil((dayLength - dayTimer) / 60));
timerText.setText(texts.time + remainingTime);
capacityText2.setText(texts.capacity + pharmacyCapacity);
rollRightsText.setText(texts.rollRights + rollRights);
}
function nextDay() {
// Customer end bonus - $20 per customer served
if (customerEndBonus) {
var bonusAmount = customersServedToday * 20;
money += bonusAmount;
}
// Decrease double money days
if (doubleMoneyDays > 0) {
doubleMoneyDays--;
}
day++;
dayTimer = 0;
customersServedToday = 0;
customersNeededToday = Math.floor(Math.random() * 7) + 2;
penalties = 0;
selectedCustomer = null;
// Clear remaining customers
for (var i = customers.length - 1; i >= 0; i--) {
customers[i].destroy();
}
customers = [];
// Save progress
storage.money = money;
storage.day = day;
storage.pharmacyCapacity = pharmacyCapacity;
updateCustomerInfo();
}
// Functions
function startGame() {
gameStarted = true;
gameRunning = true;
// Show all game UI elements
moneyText.visible = true;
rollRightsText.visible = true;
dayText.visible = true;
timerText.visible = true;
modeText.visible = true;
capacityText2.visible = true;
customerInfoText.visible = true;
counter.visible = true;
regularButton.visible = true;
enhancedButton.visible = true;
regularLabel.visible = true;
enhancedLabel.visible = true;
// Initialize upgrade levels
regularUpgradeLevel = 1;
enhancedUpgradeLevel = 1;
rollRights = 3;
// Set difficulty-based starting values
if (gameDifficulty === 'easy') {
money = 500;
regularUpgradeBonus = 20; // Regular 30-40 instead of 10-20
enhancedMultiplier = 2.1; // Enhanced 3x instead of 1.5x
rollRights = 6; // Easy mode gets 6 roll rights
} else if (gameDifficulty === 'normal') {
money = 250;
regularUpgradeBonus = 10; // Regular 20-30 instead of 10-20
enhancedMultiplier = 1.7; // Enhanced 2x instead of 1.5x
rollRights = 4; // Normal mode gets 4 roll rights
} else {
// hard mode
money = 100; // Keep current starting money
regularUpgradeBonus = 0; // Keep current values (10-20)
enhancedMultiplier = 1.5; // Keep current multiplier
rollRights = 2; // Hard mode gets 2 roll rights
}
// Update mode text based on selected difficulty
var modeDisplayText = gameDifficulty === 'easy' ? 'Kolay' : gameDifficulty === 'hard' ? 'Zor' : 'Orta';
modeText.setText('Mod: ' + modeDisplayText);
// Update UI elements with new values
updateUI();
regularLabel.setText('Normal ($' + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
enhancedLabel.setText('Geliştirilmiş (' + enhancedMultiplier.toFixed(1) + 'x kâr)');
// Apply stored volume settings to all sound effects
var savedVolume = storage.volume;
LK.getSound('cashRegister').volume = savedVolume;
LK.getSound('warning').volume = savedVolume;
LK.getSound('customerArrival').volume = savedVolume;
if (savedVolume > 0) {
LK.playMusic('gameplayMusic', {
fade: {
start: 0,
end: savedVolume,
duration: 100
}
});
} else {}
// Apply current language to all text elements
currentLanguage = storage.language || 'turkish';
updateAllLanguageTexts();
}
// Event handlers
game.update = function () {
if (!gameStarted || !gameRunning) {
return;
}
dayTimer++;
// Check if day time is over AND no customers remain
if (dayTimer >= dayLength && customers.length === 0) {
dayTimer = dayLength; // Prevent timer from going below 0
gameRunning = false;
// Check if this is a special upgrade day (2, 4, 6, 8)
if ((day === 2 || day === 4 || day === 6 || day === 8) && !endOfDayMenu) {
var specialUpgradeMenu = game.addChild(new SpecialUpgradeMenu());
} else if (!endOfDayMenu) {
endOfDayMenu = game.addChild(new EndOfDayMenu());
}
return;
}
// Clamp dayTimer to prevent negative display
if (dayTimer > dayLength) {
dayTimer = dayLength;
}
// Spawn customers randomly - faster with upgrades (only if time hasn't run out)
var baseSpawnRate = 120;
var adjustedSpawnRate = Math.max(30, baseSpawnRate - customerSpeedUpgrade * 10);
var spawnProbability = Math.min(0.95, 0.7 + customerSpeedUpgrade * 0.05);
if (dayTimer < dayLength && LK.ticks % adjustedSpawnRate === 0 && Math.random() < spawnProbability) {
spawnCustomer();
}
// Remove served customers
for (var i = customers.length - 1; i >= 0; i--) {
var customer = customers[i];
if (customer.served && customer.alpha <= 0) {
customers.splice(i, 1);
customersServedToday++;
}
}
// Check win condition
if (money >= 10000) {
LK.showYouWin();
}
// Check lose condition
if (money < 0) {
LK.showGameOver();
}
updateUI();
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
volume: 0.3,
language: "turkish"
});
/****
* Classes
****/
var ConfirmationDialog = Container.expand(function (message, cost, onConfirm) {
var self = Container.call(this);
// Dialog background - covers entire screen to block clicks
var dialogBg = self.attachAsset('pharmacyBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
scaleX: 1.0,
scaleY: 1.0
});
dialogBg.tint = 0x000000;
dialogBg.alpha = 1.0;
// Add click handler to background to prevent clicks from going through
dialogBg.down = function (x, y, obj) {
// Do nothing - this blocks clicks from reaching other elements
};
// Get current language texts
var texts = languageTexts[currentLanguage];
// Confirmation message
var messageContent = cost > 0 ? texts.upgradeQuestion + '\n' + message + '\n' + texts.cost + cost : message + '\n\n' + texts.addonQuestion;
var messageText = new Text2(messageContent, {
size: 60,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
messageText.anchor.set(0.5, 0.5);
messageText.x = 1024;
messageText.y = 1200;
self.addChild(messageText);
// Yes button
var yesButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 824,
y: 1500,
scaleX: 1.5,
scaleY: 1.5
}));
yesButton.tint = 0x228b22;
var yesText = new Text2(texts.yes, {
size: 50,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
yesText.anchor.set(0.5, 0.5);
yesText.x = 824;
yesText.y = 1500;
self.addChild(yesText);
// No button
var noButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1224,
y: 1500,
scaleX: 1.5,
scaleY: 1.5
}));
noButton.tint = 0xcc0000;
var noText = new Text2(texts.no, {
size: 50,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
noText.anchor.set(0.5, 0.5);
noText.x = 1224;
noText.y = 1500;
self.addChild(noText);
// Store text references for language updates
self.messageText = messageText;
self.yesText = yesText;
self.noText = noText;
self.originalMessage = message;
self.originalCost = cost;
// Update dialog text when language changes
self.updateLanguage = function () {
var texts = languageTexts[currentLanguage];
var translatedMessage = self.originalMessage;
// Translate upgrade names for confirmation dialogs
if (self.originalCost > 0) {
var upgradeTranslations = {
'turkish': {
'Kapasite Yükseltmesi': 'Kapasite Yükseltmesi',
'Normal İlaç Yükseltmesi': 'Normal İlaç Yükseltmesi',
'Gelişmiş İlaç Yükseltmesi': 'Gelişmiş İlaç Yükseltmesi',
'Müşteri Hızı Yükseltmesi': 'Müşteri Hızı Yükseltmesi'
},
'english': {
'Kapasite Yükseltmesi': 'Capacity Upgrade',
'Normal İlaç Yükseltmesi': 'Regular Medicine Upgrade',
'Gelişmiş İlaç Yükseltmesi': 'Enhanced Medicine Upgrade',
'Müşteri Hızı Yükseltmesi': 'Customer Speed Upgrade'
},
'french': {
'Kapasite Yükseltmesi': 'Amélioration de Capacité',
'Normal İlaç Yükseltmesi': 'Amélioration Médicament Régulier',
'Gelişmiş İlaç Yükseltmesi': 'Amélioration Médicament Amélioré',
'Müşteri Hızı Yükseltmesi': 'Amélioration Vitesse Client'
},
'korean': {
'Kapasite Yükseltmesi': '용량 업그레이드',
'Normal İlaç Yükseltmesi': '일반 약물 업그레이드',
'Gelişmiş İlaç Yükseltmesi': '향상된 약물 업그레이드',
'Müşteri Hızı Yükseltmesi': '고객 속도 업그레이드'
},
'italian': {
'Kapasite Yükseltmesi': 'Potenziamento Capacità',
'Normal İlaç Yükseltmesi': 'Potenziamento Medicina Regolare',
'Gelişmiş İlaç Yükseltmesi': 'Potenziamento Medicina Avanzata',
'Müşteri Hızı Yükseltmesi': 'Potenziamento Velocità Cliente'
},
'german': {
'Kapasite Yükseltmesi': 'Kapazitäts-Upgrade',
'Normal İlaç Yükseltmesi': 'Normale Medizin-Upgrade',
'Gelişmiş İlaç Yükseltmesi': 'Verstärkte Medizin-Upgrade',
'Müşteri Hızı Yükseltmesi': 'Kundengeschwindigkeit-Upgrade'
},
'russian': {
'Kapasite Yükseltmesi': 'Улучшение Вместимости',
'Normal İlaç Yükseltmesi': 'Улучшение Обычного Лекарства',
'Gelişmiş İlaç Yükseltmesi': 'Улучшение Усиленного Лекарства',
'Müşteri Hızı Yükseltmesi': 'Улучшение Скорости Клиентов'
},
'pirate': {
'Kapasite Yükseltmesi': 'Ambarı büyüt bre!',
'Normal İlaç Yükseltmesi': 'Hapı güçlendir ha!',
'Gelişmiş İlaç Yükseltmesi': 'Hapı kudurt aslanım!',
'Müşteri Hızı Yükseltmesi': 'Müşteriye yelken açtır!'
}
};
if (upgradeTranslations[currentLanguage] && upgradeTranslations[currentLanguage][self.originalMessage]) {
translatedMessage = upgradeTranslations[currentLanguage][self.originalMessage];
}
}
var messageContent = self.originalCost > 0 ? texts.upgradeQuestion + '\n' + translatedMessage + '\n' + texts.cost + self.originalCost : translatedMessage + '\n\n' + texts.addonQuestion;
self.messageText.setText(messageContent);
self.yesText.setText(texts.yes);
self.noText.setText(texts.no);
};
// Event handlers
yesButton.down = function (x, y, obj) {
onConfirm();
self.destroy();
};
noButton.down = function (x, y, obj) {
self.destroy();
};
return self;
});
var Customer = Container.expand(function () {
var self = Container.call(this);
// Determine customer type based on active addons
self.isDouble = doubleCustomersActive && Math.random() < 0.2;
self.isVip = vipCustomersActive && Math.random() < 0.15;
self.isSuspicious = !self.isDouble && !self.isVip && Math.random() < 0.3;
self.willReport = self.isSuspicious ? false : Math.random() < 0.4;
self.served = false;
self.timeOnScreen = 0;
self.needsSecondDose = self.isDouble;
// Define customer types
var customerTypes = ['customer', 'customerElderly', 'customerYoung', 'customerBusiness'];
var selectedType;
if (self.isDouble) {
selectedType = 'doubleCustomer';
} else if (self.isVip) {
selectedType = 'vipCustomer';
} else if (self.isSuspicious) {
selectedType = 'suspiciousCustomer';
} else {
selectedType = customerTypes[Math.floor(Math.random() * customerTypes.length)];
}
self.customerType = selectedType;
var customerGraphics = self.attachAsset(selectedType, {
anchorX: 0.5,
anchorY: 1.0,
scaleX: 1.5,
scaleY: 1.5
});
self.regularPayment = 10 + Math.floor(Math.random() * 11);
self.enhancedPayment = Math.floor((self.regularPayment + regularUpgradeBonus) * enhancedMultiplier);
self.update = function () {
self.timeOnScreen++;
var patienceTime = riskBalanceActive ? 210 : 300; // 30% less patience if risk balance active
if (self.timeOnScreen > patienceTime && !self.served) {
self.leaveAngry();
}
};
self.serveRegular = function () {
if (self.served) {
return;
}
self.served = true;
var earnedAmount = self.regularPayment + regularUpgradeBonus;
// "Might report illegal activity!" (willReport true): regular = earn, enhanced = 50% earn
// "Seems trustworthy" (willReport false, not suspicious): always earn
// Suspicious: regular = lose, enhanced = earn
if (self.isSuspicious) {
// Suspicious: regular = lose, enhanced = earn
var penaltyAmount = 20 * day;
money -= penaltyAmount;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('warning').volume = savedVolume;
LK.getSound('warning').play();
}
penalties++;
self.showMoneyLost(penaltyAmount);
earnedAmount = 0; // No money earned
} else if (self.willReport) {
// "Might report illegal activity!" - regular = earn
// EnhancedFocus disables regular income
if (enhancedFocusActive) {
earnedAmount = 0;
} else {
// Regular enhanced chance - 15% chance to get enhanced price
if (regularEnhancedChance && Math.random() < 0.15) {
earnedAmount = Math.floor((self.regularPayment + regularUpgradeBonus) * enhancedMultiplier);
}
// VIP customer doubles money
if (self.isVip) {
earnedAmount *= 2;
}
// Double money days
if (doubleMoneyDays > 0) {
earnedAmount *= 2;
}
// Risk balance - 1.5x multiplier
if (riskBalanceActive) {
earnedAmount = Math.floor(earnedAmount * 1.5);
}
}
money += earnedAmount;
if (earnedAmount > 0) {
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('cashRegister').volume = savedVolume;
LK.getSound('cashRegister').play();
}
self.showMoneyEarned(earnedAmount);
}
} else {
// "Seems trustworthy" (not suspicious, willReport false): always earn
if (enhancedFocusActive) {
earnedAmount = 0;
} else {
// Regular enhanced chance - 15% chance to get enhanced price
if (regularEnhancedChance && Math.random() < 0.15) {
earnedAmount = Math.floor((self.regularPayment + regularUpgradeBonus) * enhancedMultiplier);
}
// VIP customer doubles money
if (self.isVip) {
earnedAmount *= 2;
}
// Double money days
if (doubleMoneyDays > 0) {
earnedAmount *= 2;
}
// Risk balance - 1.5x multiplier
if (riskBalanceActive) {
earnedAmount = Math.floor(earnedAmount * 1.5);
}
}
money += earnedAmount;
if (earnedAmount > 0) {
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('cashRegister').volume = savedVolume;
LK.getSound('cashRegister').play();
}
self.showMoneyEarned(earnedAmount);
}
}
// Handle double customers
if (self.needsSecondDose) {
self.needsSecondDose = false;
self.served = false; // Allow second serving
return; // Don't leave yet
}
self.leave();
};
self.serveEnhanced = function () {
if (self.served) {
return;
}
self.served = true;
// "Might report illegal activity!" (willReport true): enhanced = 50% earn, 50% penalty
// "Seems trustworthy" (willReport false, not suspicious): always earn
// Suspicious: enhanced = earn, regular = lose
if (self.isSuspicious) {
// Suspicious: enhanced = earn
var enhancedAmount = Math.floor((self.regularPayment + regularUpgradeBonus) * enhancedMultiplier);
// Enhanced double chance - 15% chance for 2x money
if (enhancedDoubleChance && Math.random() < 0.15) {
enhancedAmount *= 2;
}
// Enhanced focus addon - 2x money from enhanced
if (enhancedFocusActive) {
enhancedAmount *= 2;
}
// VIP customer doubles money
if (self.isVip) {
enhancedAmount *= 2;
}
// Double money days
if (doubleMoneyDays > 0) {
enhancedAmount *= 2;
}
// Risk balance - 1.5x multiplier
if (riskBalanceActive) {
enhancedAmount = Math.floor(enhancedAmount * 1.5);
}
money += enhancedAmount;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('cashRegister').volume = savedVolume;
LK.getSound('cashRegister').play();
}
self.showMoneyEarned(enhancedAmount);
} else if (self.willReport) {
// "Might report illegal activity!" - enhanced = 50% earn, 50% penalty
if (Math.random() < 0.3) {
// Earn money
var enhancedAmount = Math.floor((self.regularPayment + regularUpgradeBonus) * enhancedMultiplier);
if (enhancedDoubleChance && Math.random() < 0.15) {
enhancedAmount *= 2;
}
if (enhancedFocusActive) {
enhancedAmount *= 2;
}
if (self.isVip) {
enhancedAmount *= 2;
}
if (doubleMoneyDays > 0) {
enhancedAmount *= 2;
}
if (riskBalanceActive) {
enhancedAmount = Math.floor(enhancedAmount * 1.5);
}
money += enhancedAmount;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('cashRegister').volume = savedVolume;
LK.getSound('cashRegister').play();
}
self.showMoneyEarned(enhancedAmount);
} else {
// Penalty
var penaltyAmount = 20 * day;
money -= penaltyAmount;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('warning').volume = savedVolume;
LK.getSound('warning').play();
}
penalties++;
self.showMoneyLost(penaltyAmount);
}
} else {
// "Seems trustworthy" (not suspicious, willReport false): 60% chance to earn
if (Math.random() < 0.7) {
// Earn money
var enhancedAmount = Math.floor((self.regularPayment + regularUpgradeBonus) * enhancedMultiplier);
if (enhancedDoubleChance && Math.random() < 0.15) {
enhancedAmount *= 2;
}
if (enhancedFocusActive) {
enhancedAmount *= 2;
}
if (self.isVip) {
enhancedAmount *= 2;
}
if (doubleMoneyDays > 0) {
enhancedAmount *= 2;
}
if (riskBalanceActive) {
enhancedAmount = Math.floor(enhancedAmount * 1.5);
}
money += enhancedAmount;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('cashRegister').volume = savedVolume;
LK.getSound('cashRegister').play();
}
self.showMoneyEarned(enhancedAmount);
} else {
// 40% chance to lose money
var penaltyAmount = 15 * day;
money -= penaltyAmount;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('warning').volume = savedVolume;
LK.getSound('warning').play();
}
penalties++;
self.showMoneyLost(penaltyAmount);
}
}
// Handle double customers
if (self.needsSecondDose) {
self.needsSecondDose = false;
self.served = false; // Allow second serving
return; // Don't leave yet
}
self.leave();
};
self.leave = function () {
tween(self, {
alpha: 0,
y: self.y - 100
}, {
duration: 500,
onFinish: function onFinish() {
self.destroy();
}
});
};
self.leaveAngry = function () {
var penaltyAmount = 10 + Math.floor(Math.random() * 11) + 15 * (day - 1);
money -= penaltyAmount;
self.served = true; // Mark as served so it gets removed from customers array
self.showMoneyLost(penaltyAmount);
self.leave();
};
self.showMoneyEarned = function (amount) {
var moneyText = new Text2('+$' + amount, {
size: 120,
fill: 0x00FF00,
font: 'Comic Sans MS'
});
moneyText.anchor.set(0.5, 0.5);
moneyText.x = self.x;
moneyText.y = self.y - 200;
// Start with larger scale for emphasis
moneyText.scaleX = 1.5;
moneyText.scaleY = 1.5;
game.addChild(moneyText);
tween(moneyText, {
y: moneyText.y - 150,
alpha: 0,
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 2000,
onFinish: function onFinish() {
moneyText.destroy();
}
});
};
self.showMoneyLost = function (amount) {
var moneyText = new Text2('-$' + amount, {
size: 120,
fill: 0xFF0000,
font: 'Comic Sans MS'
});
moneyText.anchor.set(0.5, 0.5);
moneyText.x = self.x;
moneyText.y = self.y - 200;
// Start with larger scale for emphasis
moneyText.scaleX = 1.5;
moneyText.scaleY = 1.5;
game.addChild(moneyText);
tween(moneyText, {
y: moneyText.y - 150,
alpha: 0,
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 2000,
onFinish: function onFinish() {
moneyText.destroy();
}
});
};
return self;
});
var EndOfDayMenu = Container.expand(function () {
var self = Container.call(this);
// Start menu music immediately when menu is created with stored volume
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.playMusic('menuMusic', {
fade: {
start: 0,
end: savedVolume,
duration: 100
}
});
}
// Menu background
var menuBg = self.attachAsset('pharmacyBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
scaleX: 0.8,
scaleY: 0.6
});
menuBg.tint = 0x000000;
menuBg.alpha = 0.8;
// Menu title - Day Complete at top, moved higher
var texts = languageTexts[currentLanguage];
var titleText = texts.dayComplete.replace('{day}', day);
var menuTitle = new Text2(titleText, {
size: 160,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
menuTitle.anchor.set(0.5, 0.5);
menuTitle.x = 1024;
menuTitle.y = 650;
self.addChild(menuTitle);
// Daily earnings text - below title
var earningsText = new Text2(texts.totalMoney + money, {
size: 70,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
earningsText.anchor.set(0.5, 0.5);
earningsText.x = 1024;
earningsText.y = 880;
self.addChild(earningsText);
// Capacity upgrade button - center top with more spacing (only show if capacity < 5)
var capacityButton = null;
var capacityText = null;
if (pharmacyCapacity < 5) {
capacityButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2050,
scaleX: 2.5,
scaleY: 2.5
}));
var capacityCost = 150 + (pharmacyCapacity - 1) * 50;
var capacityTextColor = money >= capacityCost ? 0xFFFFFF : 0xFF0000;
capacityText = new Text2(texts.capacityUpgrade + capacityCost, {
size: 55,
fill: capacityTextColor,
font: 'Comic Sans MS'
});
capacityText.anchor.set(0.5, 0.5);
capacityText.x = 1024;
capacityText.y = 2050;
self.addChild(capacityText);
}
// Regular payment upgrade button - center middle with proper spacing
var regularUpgradeButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1450,
scaleX: 2.5,
scaleY: 2.5
}));
var regularUpgradeCost = 200 + (regularUpgradeLevel - 1) * 50;
var regularTextColor = money >= regularUpgradeCost ? 0xFFFFFF : 0xFF0000;
var regularUpgradeText = new Text2(texts.regularUpgrade + regularUpgradeCost, {
size: 55,
fill: regularTextColor,
font: 'Comic Sans MS'
});
regularUpgradeText.anchor.set(0.5, 0.5);
regularUpgradeText.x = 1024;
regularUpgradeText.y = 1450;
self.addChild(regularUpgradeText);
// Enhanced multiplier upgrade button - center bottom with proper spacing
var enhancedUpgradeButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1750,
scaleX: 2.5,
scaleY: 2.5
}));
var enhancedUpgradeCost = 300 + (enhancedUpgradeLevel - 1) * 50;
var enhancedTextColor = money >= enhancedUpgradeCost ? 0xFFFFFF : 0xFF0000;
var enhancedUpgradeText = new Text2(texts.enhancedUpgrade + enhancedUpgradeCost, {
size: 55,
fill: enhancedTextColor,
font: 'Comic Sans MS'
});
enhancedUpgradeText.anchor.set(0.5, 0.5);
enhancedUpgradeText.x = 1024;
enhancedUpgradeText.y = 1750;
self.addChild(enhancedUpgradeText);
// Customer speed upgrade button
var customerSpeedButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1150,
scaleX: 2.5,
scaleY: 2.5
}));
var customerSpeedCost = 250 + customerSpeedUpgrade * 75;
var customerSpeedTextColor = money >= customerSpeedCost ? 0xFFFFFF : 0xFF0000;
var customerSpeedText = new Text2(texts.customerSpeedUpgrade + customerSpeedCost, {
size: 55,
fill: customerSpeedTextColor,
font: 'Comic Sans MS'
});
customerSpeedText.anchor.set(0.5, 0.5);
customerSpeedText.x = 1024;
customerSpeedText.y = 1150;
self.addChild(customerSpeedText);
// Next day button - bottom right, moved lower
var nextDayButton = self.addChild(LK.getAsset('nextDayButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1600,
y: 2190,
scaleX: 1.5,
scaleY: 1.5
}));
var nextDayText = new Text2(texts.nextDay, {
size: 50,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
nextDayText.anchor.set(0.5, 0.5);
nextDayText.x = 1600;
nextDayText.y = 2190;
self.addChild(nextDayText);
// Function to update upgrade text colors based on current money
function updateUpgradeTextColors() {
var texts = languageTexts[currentLanguage];
if (capacityText && pharmacyCapacity < 5) {
var capacityCost = 150 + (pharmacyCapacity - 1) * 50;
var capacityTextColor = money >= capacityCost ? 0xFFFFFF : 0xFF0000;
capacityText.tint = capacityTextColor;
capacityText.setText(texts.capacityUpgrade + capacityCost);
}
var regularUpgradeCost = 200 + (regularUpgradeLevel - 1) * 50;
var regularTextColor = money >= regularUpgradeCost ? 0xFFFFFF : 0xFF0000;
regularUpgradeText.tint = regularTextColor;
regularUpgradeText.setText(texts.regularUpgrade + regularUpgradeCost);
var enhancedUpgradeCost = 300 + (enhancedUpgradeLevel - 1) * 50;
var enhancedTextColor = money >= enhancedUpgradeCost ? 0xFFFFFF : 0xFF0000;
enhancedUpgradeText.tint = enhancedTextColor;
enhancedUpgradeText.setText(texts.enhancedUpgrade + enhancedUpgradeCost);
var customerSpeedCost = 250 + customerSpeedUpgrade * 75;
var customerSpeedTextColor = money >= customerSpeedCost ? 0xFFFFFF : 0xFF0000;
customerSpeedText.tint = customerSpeedTextColor;
customerSpeedText.setText(texts.customerSpeedUpgrade + customerSpeedCost);
}
// Initial color update
updateUpgradeTextColors();
// Event handlers
if (capacityButton) {
capacityButton.down = function (x, y, obj) {
var capacityCost = 150 + (pharmacyCapacity - 1) * 50;
if (money >= capacityCost && pharmacyCapacity < 5) {
var texts = languageTexts[currentLanguage];
var upgradeName = currentLanguage === 'turkish' ? 'Kapasite Yükseltmesi' : 'Capacity Upgrade';
var confirmDialog = game.addChild(new ConfirmationDialog(upgradeName, capacityCost, function () {
money -= capacityCost;
pharmacyCapacity++;
var texts = languageTexts[currentLanguage];
earningsText.setText(texts.totalMoney + money);
moneyText.setText(texts.money + money);
capacityText2.setText(texts.capacity + pharmacyCapacity);
if (pharmacyCapacity >= 5) {
capacityButton.destroy();
capacityText.destroy();
} else {
capacityText.setText(texts.capacityUpgrade + (150 + (pharmacyCapacity - 1) * 50));
}
regularLabel.setText(texts.regularMedicine + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
enhancedLabel.setText(texts.enhancedMedicine + enhancedMultiplier.toFixed(1) + texts.profit);
updateUpgradeTextColors();
}));
}
};
}
regularUpgradeButton.down = function (x, y, obj) {
var regularUpgradeCost = 200 + (regularUpgradeLevel - 1) * 50;
if (money >= regularUpgradeCost) {
var texts = languageTexts[currentLanguage];
var upgradeName = currentLanguage === 'turkish' ? 'Normal İlaç Yükseltmesi' : 'Regular Medicine Upgrade';
var confirmDialog = game.addChild(new ConfirmationDialog(upgradeName, regularUpgradeCost, function () {
money -= regularUpgradeCost;
regularUpgradeLevel++;
regularUpgradeBonus += 5;
var texts = languageTexts[currentLanguage];
earningsText.setText(texts.totalMoney + money);
moneyText.setText(texts.money + money);
regularUpgradeText.setText(texts.regularUpgrade + (200 + (regularUpgradeLevel - 1) * 50));
regularLabel.setText(texts.regularMedicine + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
enhancedLabel.setText(texts.enhancedMedicine + enhancedMultiplier.toFixed(1) + texts.profit);
updateUpgradeTextColors();
}));
}
};
enhancedUpgradeButton.down = function (x, y, obj) {
var enhancedUpgradeCost = 300 + (enhancedUpgradeLevel - 1) * 50;
if (money >= enhancedUpgradeCost) {
var texts = languageTexts[currentLanguage];
var upgradeName = currentLanguage === 'turkish' ? 'Gelişmiş İlaç Yükseltmesi' : 'Enhanced Medicine Upgrade';
var confirmDialog = game.addChild(new ConfirmationDialog(upgradeName, enhancedUpgradeCost, function () {
money -= enhancedUpgradeCost;
enhancedUpgradeLevel++;
enhancedMultiplier += 0.2;
var texts = languageTexts[currentLanguage];
earningsText.setText(texts.totalMoney + money);
moneyText.setText(texts.money + money);
enhancedUpgradeText.setText(texts.enhancedUpgrade + (300 + (enhancedUpgradeLevel - 1) * 50));
regularLabel.setText(texts.regularMedicine + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
enhancedLabel.setText(texts.enhancedMedicine + enhancedMultiplier.toFixed(1) + texts.profit);
updateUpgradeTextColors();
}));
}
};
customerSpeedButton.down = function (x, y, obj) {
var customerSpeedCost = 250 + customerSpeedUpgrade * 75;
if (money >= customerSpeedCost) {
var texts = languageTexts[currentLanguage];
var upgradeName = currentLanguage === 'turkish' ? 'Müşteri Hızı Yükseltmesi' : 'Customer Speed Upgrade';
var confirmDialog = game.addChild(new ConfirmationDialog(upgradeName, customerSpeedCost, function () {
money -= customerSpeedCost;
customerSpeedUpgrade++;
var texts = languageTexts[currentLanguage];
earningsText.setText(texts.totalMoney + money);
moneyText.setText(texts.money + money);
customerSpeedText.setText(texts.customerSpeedUpgrade + (250 + customerSpeedUpgrade * 75));
updateUpgradeTextColors();
}));
}
};
nextDayButton.down = function (x, y, obj) {
nextDay();
self.destroy();
endOfDayMenu = null;
gameRunning = true;
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.playMusic('gameplayMusic', {
fade: {
start: 0,
end: savedVolume,
duration: 100
}
});
} else {}
};
return self;
});
var GameStartScreen = Container.expand(function () {
var self = Container.call(this);
// Start screen background
var startBg = self.attachAsset('startBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
});
// Game title
var texts = languageTexts[currentLanguage];
var titleText = new Text2(texts.gameTitle, {
size: 200,
fill: 0x0a1df0,
font: 'Comic Sans MS'
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 350;
self.addChild(titleText);
// Save reference to titleText
self.titleText = titleText;
// Subtitle
var subtitleText = new Text2(texts.gameSubtitle, {
size: 90,
fill: 0x000000,
font: 'Comic Sans MS'
});
subtitleText.anchor.set(0.5, 0.5);
subtitleText.x = 1024;
subtitleText.y = 600;
self.addChild(subtitleText);
// Save reference to subtitleText
self.subtitleText = subtitleText;
// Settings button
var settingsButton = self.addChild(LK.getAsset('menuButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1600,
scaleX: 1.5,
scaleY: 1.5
}));
settingsButton.tint = 0x808080;
var settingsText = new Text2(texts.settings, {
size: 50,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
settingsText.anchor.set(0.5, 0.5);
settingsText.x = 1024;
settingsText.y = 1600;
self.addChild(settingsText);
// Save reference to settingsText
self.settingsText = settingsText;
// How to play button
var howToPlayButton = self.addChild(LK.getAsset('menuButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1850,
scaleX: 1.8,
scaleY: 1.5
}));
howToPlayButton.tint = 0x4169e1;
var howToPlayText = new Text2(texts.howToPlay, {
size: 50,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
howToPlayText.anchor.set(0.5, 0.5);
howToPlayText.x = 1024;
howToPlayText.y = 1850;
self.addChild(howToPlayText);
// Save reference to howToPlayText
self.howToPlayText = howToPlayText;
// Difficulty selection button
self.selectedDifficulty = 'normal';
var difficultyButton = self.addChild(LK.getAsset('menuButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1350,
scaleX: 1.8,
scaleY: 1.5
}));
difficultyButton.tint = 0x4682b4;
var difficultyDisplayText = self.selectedDifficulty === 'easy' ? texts.easy : self.selectedDifficulty === 'hard' ? texts.hard : texts.normal;
var difficultyText = new Text2(texts.difficulty + difficultyDisplayText, {
size: 50,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
difficultyText.anchor.set(0.5, 0.5);
difficultyText.x = 1024;
difficultyText.y = 1350;
self.addChild(difficultyText);
// Save reference to difficultyText
self.difficultyText = difficultyText;
// Start button
var startButton = self.addChild(LK.getAsset('startButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1100,
scaleX: 1.8,
scaleY: 1.8
}));
var startButtonText = new Text2(texts.start, {
size: 60,
fill: 0x000000,
font: 'Comic Sans MS'
});
startButtonText.anchor.set(0.5, 0.5);
startButtonText.x = 1024;
startButtonText.y = 1100;
self.addChild(startButtonText);
// Save reference to startButtonText
self.startButtonText = startButtonText;
// Update difficulty display
function updateDifficultyDisplay() {
var texts = languageTexts[currentLanguage];
var difficultyNames = {
'easy': texts.easy,
'normal': texts.normal,
'hard': texts.hard
};
difficultyText.setText(texts.difficulty + difficultyNames[self.selectedDifficulty]);
var colors = {
'easy': 0x90EE90,
'normal': 0x4682b4,
'hard': 0xf74a59
};
difficultyButton.tint = colors[self.selectedDifficulty];
}
// Language selection - only store in storage, no UI in start screen
self.selectedLanguage = storage.language || 'turkish';
// Settings button event - show settings screen
settingsButton.down = function (x, y, obj) {
var settingsScreen = game.addChild(new SettingsScreen(self));
};
// How to play button event - show how to play screen
howToPlayButton.down = function (x, y, obj) {
var howToPlayScreen = game.addChild(new HowToPlayScreen());
};
// Difficulty button event - cycle through difficulties
difficultyButton.down = function (x, y, obj) {
var difficulties = ['easy', 'normal', 'hard'];
var currentIndex = difficulties.indexOf(self.selectedDifficulty);
self.selectedDifficulty = difficulties[(currentIndex + 1) % difficulties.length];
updateDifficultyDisplay();
};
// Add updateLanguage method for direct updates
self.updateLanguage = function () {
var texts = languageTexts[currentLanguage];
if (self.titleText) {
self.titleText.setText(texts.gameTitle);
}
if (self.subtitleText) {
self.subtitleText.setText(texts.gameSubtitle);
}
if (self.startButtonText) {
self.startButtonText.setText(texts.start);
}
if (self.settingsText) {
self.settingsText.setText(texts.settings);
}
if (self.howToPlayText) {
self.howToPlayText.setText(texts.howToPlay);
}
if (self.difficultyText) {
var difficultyDisplayText = self.selectedDifficulty === 'easy' ? texts.easy : self.selectedDifficulty === 'hard' ? texts.hard : texts.normal;
self.difficultyText.setText(texts.difficulty + difficultyDisplayText);
}
};
// Start button event
startButton.down = function (x, y, obj) {
gameDifficulty = self.selectedDifficulty;
startGame();
self.destroy();
};
return self;
});
var HowToPlayScreen = Container.expand(function () {
var self = Container.call(this);
// Full screen opaque background
var howToPlayBg = self.attachAsset('startBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
scaleX: 1.0,
scaleY: 1.0
});
howToPlayBg.tint = 0x000000;
howToPlayBg.alpha = 1.0;
// Block all clicks on background
howToPlayBg.down = function (x, y, obj) {
// Block clicks from going through
};
// Get current language texts
var texts = languageTexts[currentLanguage];
// How to play title
var titleText = new Text2(texts.howToPlayTitle, {
size: 180,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 350;
self.addChild(titleText);
// How to play content text
var contentText = new Text2(texts.howToPlayText, {
size: 55,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
contentText.anchor.set(0.5, 0.5);
contentText.x = 1024;
contentText.y = 1400;
self.addChild(contentText);
// Back button (top right)
var backButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1800,
y: 200,
scaleX: 2.0,
scaleY: 1.5
}));
backButton.tint = 0xFF4444;
var backText = new Text2(texts.back, {
size: 60,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
backText.anchor.set(0.5, 0.5);
backText.x = 1800;
backText.y = 200;
self.addChild(backText);
// Back button event
backButton.down = function (x, y, obj) {
self.destroy();
};
return self;
});
var MedicationButton = Container.expand(function (type) {
var self = Container.call(this);
self.type = type;
var buttonGraphics = self.attachAsset(type === 'regular' ? 'regularPill' : 'greenSubstance', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
if (selectedCustomer && !selectedCustomer.served) {
if (self.type === 'regular') {
selectedCustomer.serveRegular();
} else {
selectedCustomer.serveEnhanced();
}
selectedCustomer = null;
updateCustomerInfo();
}
};
return self;
});
var SettingsScreen = Container.expand(function (parentScreen) {
var self = Container.call(this);
// Settings background - covers entire screen and blocks clicks
var settingsBg = self.attachAsset('startBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
scaleX: 0.1,
scaleY: 0.1
});
settingsBg.tint = 0x000000;
settingsBg.alpha = 0.0;
// Animate settings screen opening
tween(settingsBg, {
scaleX: 1.0,
scaleY: 1.0,
alpha: 1.0
}, {
duration: 300,
easing: tween.easeOut
});
// Add click handler to background to prevent clicks from going through
settingsBg.down = function (x, y, obj) {
// Do nothing - this blocks clicks from reaching other elements
};
// Settings title
var titleText = new Text2('AYARLAR', {
size: 200,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 400;
self.addChild(titleText);
// Volume label
var volumeLabel = new Text2('SES SEVİYESİ', {
size: 100,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
volumeLabel.anchor.set(0.5, 0.5);
volumeLabel.x = 1024;
volumeLabel.y = 800;
self.addChild(volumeLabel);
// Current volume (convert from 0-1 to 0-100 in steps of 10)
var currentVolumeFloat = storage.volume;
var currentVolumeStep = Math.round(currentVolumeFloat * 10) * 10;
// Get current language texts for initialization
var texts = languageTexts[currentLanguage];
// Settings title - update with current language
titleText.setText(texts.settings);
// Volume label - update with current language
volumeLabel.setText(texts.volumeLevel);
// Language label
var languageLabel = new Text2(texts.languageSelection, {
size: 100,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
languageLabel.anchor.set(0.5, 0.5);
languageLabel.x = 1024;
languageLabel.y = 1400;
self.addChild(languageLabel);
// Left arrow button for language
var languageLeftArrow = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 600,
y: 1600,
scaleX: 1.5,
scaleY: 1.5
}));
languageLeftArrow.tint = 0x9932CC;
var languageLeftArrowText = new Text2('<', {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
languageLeftArrowText.anchor.set(0.5, 0.5);
languageLeftArrowText.x = 600;
languageLeftArrowText.y = 1600;
self.addChild(languageLeftArrowText);
// Language display
var languageDisplayText = new Text2('TÜRKÇE', {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
languageDisplayText.anchor.set(0.5, 0.5);
languageDisplayText.x = 1024;
languageDisplayText.y = 1600;
self.addChild(languageDisplayText);
// Right arrow button for language
var languageRightArrow = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1450,
y: 1600,
scaleX: 1.5,
scaleY: 1.5
}));
languageRightArrow.tint = 0x9932CC;
var languageRightArrowText = new Text2('>', {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
languageRightArrowText.anchor.set(0.5, 0.5);
languageRightArrowText.x = 1450;
languageRightArrowText.y = 1600;
self.addChild(languageRightArrowText);
// Update language display function
function updateLanguageDisplay() {
var languageNames = {
'turkish': 'TÜRKÇE',
'english': 'ENGLISH',
'french': 'FRANÇAIS',
'korean': '한국어',
'italian': 'ITALIANO',
'german': 'DEUTSCH',
'russian': 'РУССКИЙ',
'pirate': 'PIRATE'
};
languageDisplayText.setText(languageNames[currentLanguage]);
}
// Initialize language display
updateLanguageDisplay();
// Left arrow button
var leftArrow = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 724,
y: 1000,
scaleX: 1.5,
scaleY: 1.5
}));
leftArrow.tint = 0x4169e1;
var leftArrowText = new Text2('<', {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
leftArrowText.anchor.set(0.5, 0.5);
leftArrowText.x = 724;
leftArrowText.y = 1000;
self.addChild(leftArrowText);
// Volume display
var volumeText = new Text2(currentVolumeStep + '%', {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
volumeText.anchor.set(0.5, 0.5);
volumeText.x = 1024;
volumeText.y = 1000;
self.addChild(volumeText);
// Right arrow button
var rightArrow = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1324,
y: 1000,
scaleX: 1.5,
scaleY: 1.5
}));
rightArrow.tint = 0x4169e1;
var rightArrowText = new Text2('>', {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
rightArrowText.anchor.set(0.5, 0.5);
rightArrowText.x = 1324;
rightArrowText.y = 1000;
self.addChild(rightArrowText);
// Back button (top right)
var backButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1800,
y: 200,
scaleX: 2.0,
scaleY: 1.5
}));
backButton.tint = 0xFF4444;
var backText = new Text2(texts.back, {
size: 60,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
backText.anchor.set(0.5, 0.5);
backText.x = 1800;
backText.y = 200;
self.addChild(backText);
// Update volume function
function updateVolume(volumeStep) {
currentVolumeStep = Math.max(0, Math.min(100, volumeStep));
currentVolumeFloat = currentVolumeStep / 100;
volumeText.setText(currentVolumeStep + '%');
// Save volume to storage
storage.volume = currentVolumeFloat;
// Ensure storage persistence
storage = LK.import('@upit/storage.v1', storage);
// Apply volume to all sounds
LK.getSound('cashRegister').volume = currentVolumeFloat;
LK.getSound('warning').volume = currentVolumeFloat;
LK.getSound('customerArrival').volume = currentVolumeFloat;
// Apply volume to music - stop current music but don't play new music during settings adjustment
LK.stopMusic();
}
// Arrow button events
leftArrow.down = function (x, y, obj) {
if (currentVolumeStep > 0) {
updateVolume(currentVolumeStep - 10);
}
};
rightArrow.down = function (x, y, obj) {
if (currentVolumeStep < 100) {
updateVolume(currentVolumeStep + 10);
}
};
// Language arrow button events
languageLeftArrow.down = function (x, y, obj) {
var languages = ['turkish', 'english', 'french', 'korean', 'italian', 'german', 'russian', 'pirate'];
var currentIndex = languages.indexOf(currentLanguage);
var newIndex = (currentIndex - 1 + languages.length) % languages.length;
// Update global currentLanguage variable
currentLanguage = languages[newIndex];
storage.language = currentLanguage;
// Ensure storage persistence
storage = LK.import('@upit/storage.v1', storage);
updateLanguageDisplay();
updateAllLanguageTexts(); // Apply language change to all game text
// Update settings screen text immediately
var texts = languageTexts[currentLanguage];
titleText.setText(texts.settings);
volumeLabel.setText(texts.volumeLevel);
languageLabel.setText(texts.languageSelection);
backText.setText(texts.back);
};
languageRightArrow.down = function (x, y, obj) {
var languages = ['turkish', 'english', 'french', 'korean', 'italian', 'german', 'russian', 'pirate'];
var currentIndex = languages.indexOf(currentLanguage);
var newIndex = (currentIndex + 1) % languages.length;
// Update global currentLanguage variable
currentLanguage = languages[newIndex];
storage.language = currentLanguage;
// Ensure storage persistence
storage = LK.import('@upit/storage.v1', storage);
updateLanguageDisplay();
updateAllLanguageTexts(); // Apply language change to all game text
// Update settings screen text immediately
var texts = languageTexts[currentLanguage];
titleText.setText(texts.settings);
volumeLabel.setText(texts.volumeLevel);
languageLabel.setText(texts.languageSelection);
backText.setText(texts.back);
};
// Back button event
backButton.down = function (x, y, obj) {
self.destroy();
};
return self;
});
var SpecialUpgradeMenu = Container.expand(function () {
var self = Container.call(this);
// Available addons with descriptions and effects
var availableAddons = currentLanguage === 'turkish' ? [{
name: 'Para Şansı',
description: 'Random -500 ila +500 para',
apply: function apply() {
var randomMoney = Math.floor(Math.random() * 1001) - 500;
money += randomMoney;
}
}, {
name: 'Roll Hediyesi',
description: '3 roll hakkı kazanın',
apply: function apply() {
rollRights += 3;
}
}, {
name: 'Süper Yükseltme',
description: 'Tüm upgradeler +1 (kapasite hariç)',
apply: function apply() {
regularUpgradeLevel++;
regularUpgradeBonus += 5;
enhancedUpgradeLevel++;
enhancedMultiplier += 0.2;
customerSpeedUpgrade++;
}
}, {
name: 'Zaman Uzatma',
description: 'Sonraki günler 10sn uzar',
apply: function apply() {
dayLength += 600; // 10 seconds = 600 ticks
}
}, {
name: 'Çift İlaç Müşteri',
description: 'Çift ilaç alan müşteriler gelir',
apply: function apply() {
doubleCustomersActive = true;
}
}, {
name: 'VIP Müşteriler',
description: 'VIP müşteriler 2x para kazandırır',
apply: function apply() {
vipCustomersActive = true;
}
}, {
name: 'Regular Bonusu',
description: 'Regular ilaçlar %15 şansla enhanced fiyatı',
apply: function apply() {
regularEnhancedChance = true;
}
}, {
name: 'Enhanced Bonusu',
description: 'Enhanced ilaçlar %15 şansla 2x gelir',
apply: function apply() {
enhancedDoubleChance = true;
}
}, {
name: 'Müşteri Bonusu',
description: 'Gün sonunda müşteri başına $20',
apply: function apply() {
customerEndBonus = true;
}
}, {
name: 'Çift Kazanç',
description: 'Sonraki 2 gün 2x para',
apply: function apply() {
doubleMoneyDays = 2;
}
}, {
name: 'Risk Dengeleme',
description: '1.5x gelir ama %30 az sabır',
apply: function apply() {
riskBalanceActive = true;
}
}, {
name: 'Enhanced Odak',
description: 'Enhanced 2x kazanç ama regular 0',
apply: function apply() {
enhancedFocusActive = true;
}
}] : [{
name: 'Money Chance',
description: 'Random -500 to +500 money',
apply: function apply() {
var randomMoney = Math.floor(Math.random() * 1001) - 500;
money += randomMoney;
}
}, {
name: 'Roll Gift',
description: 'Gain 3 roll rights',
apply: function apply() {
rollRights += 3;
}
}, {
name: 'Super Upgrade',
description: 'All upgrades +1 (except capacity)',
apply: function apply() {
regularUpgradeLevel++;
regularUpgradeBonus += 5;
enhancedUpgradeLevel++;
enhancedMultiplier += 0.2;
customerSpeedUpgrade++;
}
}, {
name: 'Time Extension',
description: 'Next days last 10s longer',
apply: function apply() {
dayLength += 600; // 10 seconds = 600 ticks
}
}, {
name: 'Double Medicine Customer',
description: 'Customers needing double medicine appear',
apply: function apply() {
doubleCustomersActive = true;
}
}, {
name: 'VIP Customers',
description: 'VIP customers give 2x money',
apply: function apply() {
vipCustomersActive = true;
}
}, {
name: 'Regular Bonus',
description: 'Regular medicine 15% chance enhanced price',
apply: function apply() {
regularEnhancedChance = true;
}
}, {
name: 'Enhanced Bonus',
description: 'Enhanced medicine 15% chance 2x income',
apply: function apply() {
enhancedDoubleChance = true;
}
}, {
name: 'Customer Bonus',
description: '$20 per customer at day end',
apply: function apply() {
customerEndBonus = true;
}
}, {
name: 'Double Income',
description: 'Next 2 days 2x money',
apply: function apply() {
doubleMoneyDays = 2;
}
}, {
name: 'Risk Balance',
description: '1.5x income but 30% less patience',
apply: function apply() {
riskBalanceActive = true;
}
}, {
name: 'Enhanced Focus',
description: 'Enhanced 2x income but regular 0',
apply: function apply() {
enhancedFocusActive = true;
}
}];
// Function to get random addon excluding already selected ones
function getRandomAddon(excludeAddons) {
var availableChoices = availableAddons.filter(function (addon) {
return excludeAddons.indexOf(addon) === -1 && selectedAddonNames.indexOf(addon.name) === -1;
});
if (availableChoices.length === 0) {
availableChoices = availableAddons.slice(); // fallback to all addons
}
return availableChoices[Math.floor(Math.random() * availableChoices.length)];
}
// Menu background - covers entire screen
var menuBg = self.attachAsset('pharmacyBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
scaleX: 1.0,
scaleY: 1.0
});
menuBg.tint = 0x000000;
menuBg.alpha = 0.95;
// Menu title
var texts = languageTexts[currentLanguage];
var titleText = new Text2(texts.specialAddonSelection, {
size: 120,
fill: 0xFFD700,
font: 'Comic Sans MS'
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 300;
self.addChild(titleText);
// Money display
var moneyDisplayText = new Text2(texts.money + money, {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
moneyDisplayText.anchor.set(0.5, 0.5);
moneyDisplayText.x = 1024;
moneyDisplayText.y = 400;
self.addChild(moneyDisplayText);
// Roll rights display
var rollDisplayText = new Text2(texts.rollRights + rollRights, {
size: 80,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
rollDisplayText.anchor.set(0.5, 0.5);
rollDisplayText.x = 1024;
rollDisplayText.y = 480;
self.addChild(rollDisplayText);
// Select 3 random addons excluding already selected ones
var selectedAddons = [];
var availableForSelection = availableAddons.filter(function (addon) {
return selectedAddonNames.indexOf(addon.name) === -1;
});
// If we don't have enough unselected addons, include some selected ones
if (availableForSelection.length < 3) {
availableForSelection = availableAddons.slice();
}
var shuffledAddons = availableForSelection.slice();
// Simple shuffle
for (var i = shuffledAddons.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = shuffledAddons[i];
shuffledAddons[i] = shuffledAddons[j];
shuffledAddons[j] = temp;
}
selectedAddons = shuffledAddons.slice(0, 3);
// Create addon buttons
var addonButtons = [];
var addonTexts = [];
var rollButtons = [];
for (var i = 0; i < 3; i++) {
var addon = selectedAddons[i];
var yPos = 1000 + i * 600;
// Addon button
var addonButton = self.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 900,
y: yPos,
scaleX: 6.0,
scaleY: 5.0
}));
addonButton.tint = 0x9932CC;
// Addon text
var addonText = new Text2(addon.name + '\n' + addon.description, {
size: 65,
fill: 0xFFFFFF,
font: 'Comic Sans MS'
});
addonText.anchor.set(0.5, 0.5);
addonText.x = 900;
addonText.y = yPos;
self.addChild(addonText);
// Roll button
var rollButton = self.addChild(LK.getAsset('rollButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1850,
y: yPos,
scaleX: 2.5,
scaleY: 2.5
}));
// Roll button text
var rollButtonText = new Text2(texts.rollDice, {
size: 65,
fill: 0x000000,
font: 'Comic Sans MS'
});
rollButtonText.anchor.set(0.5, 0.5);
rollButtonText.x = 1850;
rollButtonText.y = yPos;
self.addChild(rollButtonText);
// Store references
addonButtons.push(addonButton);
addonTexts.push(addonText);
rollButtons.push(rollButton);
// Add click handler - store addon reference directly on button
addonButton.selectedAddon = addon;
addonButton.down = function (x, y, obj) {
var selectedAddon = this.selectedAddon;
var confirmDialog = game.addChild(new ConfirmationDialog(selectedAddon.name + '\n' + selectedAddon.description, 0, function () {
selectedAddon.apply();
// Track this addon as selected
if (selectedAddonNames.indexOf(selectedAddon.name) === -1) {
selectedAddonNames.push(selectedAddon.name);
}
updateUI();
regularLabel.setText('Normal ($' + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
enhancedLabel.setText('Geliştirilmiş (' + enhancedMultiplier.toFixed(1) + 'x kâr)');
capacityText2.setText('Kapasite: ' + pharmacyCapacity);
self.destroy();
// Show end of day menu after addon selection
if (!endOfDayMenu) {
endOfDayMenu = game.addChild(new EndOfDayMenu());
}
}));
};
// Roll button click handler
rollButton.addonIndex = i;
rollButton.down = function (x, y, obj) {
if (rollRights > 0) {
rollRights--;
var texts = languageTexts[currentLanguage];
rollRightsText.setText(texts.rollRights + rollRights);
rollDisplayText.setText(texts.rollRights + rollRights);
var index = this.addonIndex;
// Get new random addon excluding currently selected ones
var newAddon = getRandomAddon(selectedAddons);
selectedAddons[index] = newAddon;
addonButtons[index].selectedAddon = newAddon;
addonTexts[index].setText(newAddon.name + '\n' + newAddon.description);
}
};
}
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xf0f8ff
});
/****
* Game Code
****/
// Game variables
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _defineProperty(e, r, t) {
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
value: t,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[r] = t, e;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) {
return t;
}
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) {
return i;
}
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
var money = 0;
var day = 1;
var pharmacyCapacity = 1;
var penalties = 0;
var customers = [];
var selectedCustomer = null;
var dayTimer = 0;
var dayLength = 1800; // 30 seconds per day
var customersServedToday = 0;
var customersNeededToday = Math.floor(Math.random() * 7) + 2;
var endOfDayMenu = null;
var gameRunning = false;
var gameStarted = false;
var regularUpgradeBonus = 0;
var enhancedMultiplier = 1.5;
var customerSpeedUpgrade = 0;
var gameDifficulty = 'normal'; // Default difficulty
var regularUpgradeLevel = 1;
var enhancedUpgradeLevel = 1;
var rollRights = 3;
// New addon variables
var doubleCustomersActive = false;
var vipCustomersActive = false;
var regularEnhancedChance = false;
var enhancedDoubleChance = false;
var customerEndBonus = false;
var doubleMoneyDays = 0;
var riskBalanceActive = false;
var enhancedFocusActive = false;
// Track selected addons to prevent re-selection
var selectedAddonNames = [];
// Language system - use stored language or default to Turkish
var currentLanguage = storage.language || 'turkish';
storage.language = currentLanguage;
// Language texts
var languageTexts = _defineProperty(_defineProperty(_defineProperty(_defineProperty({
turkish: {
money: 'Para: $',
day: 'Gün ',
time: 'Zaman: ',
capacity: 'Kapasite: ',
rollRights: 'Zar Hakları: ',
mode: 'Mod: ',
clickCustomer: 'Ayrıntıları görmek için bir müşteriye tıklayın',
regularMedicine: 'Normal ($',
enhancedMedicine: 'Geliştirilmiş (',
profit: 'x kâr)',
gameTitle: 'Eczaneciler Kralı',
gameSubtitle: 'Eczanenizi yönetin \nve müşterilerinize hizmet verin!',
start: 'BAŞLAT',
settings: 'AYARLAR',
howToPlay: 'NASIL OYNANIR',
difficulty: 'ZORLUK: ',
easy: 'KOLAY',
normal: 'ORTA',
hard: 'ZOR',
back: 'GERİ',
volumeLevel: 'SES SEVİYESİ',
languageSelection: 'DİL SEÇİMİ',
yes: 'EVET',
no: 'HAYIR',
dayComplete: 'Gün {day} Tamamlandı!',
totalMoney: 'Toplam Para: $',
capacityUpgrade: 'Kapasite\nYükseltmesi\n$',
regularUpgrade: 'Normal\nYükseltmesi\n$',
enhancedUpgrade: 'Geliştirilmiş\nYükseltmesi\n$',
customerSpeedUpgrade: 'Müşteri Hızı\nYükseltmesi\n$',
nextDay: 'Sonraki Gün',
specialAddonSelection: 'Özel Eklenti Seçimi!',
rollDice: 'Zarla',
upgradeQuestion: 'Yükseltmek ister misin?',
addonQuestion: 'Bu eklentiyi seçmek istiyor musun?',
cost: 'Maliyet: $',
howToPlayTitle: 'NASIL OYNANIR',
howToPlayText: 'OYUN AMACI:\nEczanenizi yöneterek para kazanın ve 10.000$\'a ulaşın!\n\nMÜŞTERİLER:\n• Müşterilere tıklayarak bilgilerini görün\n• Normal ilaç: Güvenli ama az para\n• Geliştirilmiş ilaç: Riskli ama çok para\n\nMÜŞTERİ TİPLERİ:\n• Şüpheli: Geliştirilmiş ilaç ister, normal ilaç verirsen ceza\n• Güvenilir: %70 olasılıkla güvenebilirsin\n• Güvenilir olmayan: %30 olasılıkla güvenebilirsin\n• VIP: 2x para kazandırır\n\nYÜKSELTMELER:\n• Kapasite: Daha fazla müşteri\n• Normal ilaç: Daha fazla kazanç\n• Geliştirilmiş ilaç: Daha yüksek çarpan\n• Müşteri hızı: Daha hızlı müşteri gelişi\n\nÖZEL EKLENTİLER:\nBelirli günlerde özel yetenekler kazanabilirsiniz!'
},
english: {
money: 'Money: $',
day: 'Day ',
time: 'Time: ',
capacity: 'Capacity: ',
rollRights: 'Roll Rights: ',
mode: 'Mode: ',
clickCustomer: 'Click on a customer to see details',
regularMedicine: 'Regular ($',
enhancedMedicine: 'Enhanced (',
profit: 'x profit)',
gameTitle: 'Pharmacy King',
gameSubtitle: 'Manage your pharmacy \nand serve your customers!',
start: 'START',
settings: 'SETTINGS',
howToPlay: 'HOW TO PLAY',
difficulty: 'DIFFICULTY: ',
easy: 'EASY',
normal: 'NORMAL',
hard: 'HARD',
back: 'BACK',
volumeLevel: 'VOLUME LEVEL',
languageSelection: 'LANGUAGE SELECTION',
yes: 'YES',
no: 'NO',
dayComplete: 'Day {day} Complete!',
totalMoney: 'Total Money: $',
capacityUpgrade: 'Capacity\nUpgrade\n$',
regularUpgrade: 'Regular\nUpgrade\n$',
enhancedUpgrade: 'Enhanced\nUpgrade\n$',
customerSpeedUpgrade: 'Customer Speed\nUpgrade\n$',
nextDay: 'Next Day',
specialAddonSelection: 'Special Addon Selection!',
rollDice: 'Roll',
upgradeQuestion: 'Do you want to upgrade?',
addonQuestion: 'Do you want to select this addon?',
cost: 'Cost: $',
howToPlayTitle: 'HOW TO PLAY',
howToPlayText: 'GAME OBJECTIVE:\nManage your pharmacy to earn money and reach $10,000!\n\nCUSTOMERS:\n• Click on customers to see their details\n• Regular medicine: Safe but less money\n• Enhanced medicine: Risky but more money\n\nCUSTOMER TYPES:\n• Suspicious: Wants enhanced medicine, penalty for regular\n• Trustworthy: You can trust them 70% of the time\n• Untrustworthy: You can trust them 30% of the time\n• VIP: Gives 2x money\n\nUPGRADES:\n• Capacity: More customers at once\n• Regular medicine: Higher earnings\n• Enhanced medicine: Higher multiplier\n• Customer speed: Faster customer arrivals\n\nSPECIAL ADDONS:\nOn certain days you can gain special abilities!'
},
french: {
money: 'Argent: $',
day: 'Jour ',
time: 'Temps: ',
capacity: 'Capacité: ',
rollRights: 'Droits de Lancer: ',
mode: 'Mode: ',
clickCustomer: 'Cliquez sur un client pour voir les détails',
regularMedicine: 'Régulier ($',
enhancedMedicine: 'Amélioré (',
profit: 'x profit)',
gameTitle: 'Roi de la Pharmacie',
gameSubtitle: 'Gérez votre pharmacie \net servez vos clients!',
start: 'COMMENCER',
settings: 'PARAMÈTRES',
howToPlay: 'COMMENT JOUER',
difficulty: 'DIFFICULTÉ: ',
easy: 'FACILE',
normal: 'NORMAL',
hard: 'DIFFICILE',
back: 'RETOUR',
volumeLevel: 'NIVEAU DE VOLUME',
languageSelection: 'SÉLECTION DE LANGUE',
yes: 'OUI',
no: 'NON',
dayComplete: 'Jour {day} Terminé!',
totalMoney: 'Argent Total: $',
capacityUpgrade: 'Amélioration\nde Capacité\n$',
regularUpgrade: 'Amélioration\nRégulière\n$',
enhancedUpgrade: 'Amélioration\nAméliorée\n$',
customerSpeedUpgrade: 'Amélioration\nVitesse Client\n$',
nextDay: 'Jour Suivant',
specialAddonSelection: 'Sélection d\'Extension Spéciale!',
rollDice: 'Lancer',
upgradeQuestion: 'Voulez-vous améliorer?',
addonQuestion: 'Voulez-vous sélectionner cette extension?',
cost: 'Coût: $',
howToPlayTitle: 'COMMENT JOUER',
howToPlayText: 'OBJECTIF DU JEU:\nGérez votre pharmacie pour gagner de l\'argent et atteindre 10 000$!\n\nCLIENTS:\n• Cliquez sur les clients pour voir leurs détails\n• Médicament régulier: Sûr mais moins d\'argent\n• Médicament amélioré: Risqué mais plus d\'argent\n\nTYPES DE CLIENTS:\n• Suspect: Veut des médicaments améliorés, pénalité pour régulier\n• Digne de confiance: Vous pouvez leur faire confiance 70% du temps\n• Pas digne de confiance: Vous pouvez leur faire confiance 30% du temps\n• VIP: Donne 2x l\'argent\n\nAMÉLIORATIONS:\n• Capacité: Plus de clients à la fois\n• Médicament régulier: Gains plus élevés\n• Médicament amélioré: Multiplicateur plus élevé\n• Vitesse client: Arrivées de clients plus rapides\n\nEXTENSIONS SPÉCIALES:\nCertains jours, vous pouvez obtenir des capacités spéciales!'
},
korean: {
money: '돈: $',
day: '날 ',
time: '시간: ',
capacity: '용량: ',
rollRights: '주사위 권리: ',
mode: '모드: ',
clickCustomer: '자세한 내용을 보려면 고객을 클릭하세요',
regularMedicine: '일반 ($',
enhancedMedicine: '향상된 (',
profit: 'x 이익)',
gameTitle: '약국의 왕',
gameSubtitle: '당신의 약국을 관리하고 \n고객들에게 서비스를 제공하세요!',
start: '시작',
settings: '설정',
howToPlay: '게임 방법',
difficulty: '난이도: ',
easy: '쉬움',
normal: '보통',
hard: '어려움',
back: '뒤로',
volumeLevel: '볼륨 레벨',
languageSelection: '언어 선택',
yes: '네',
no: '아니오',
dayComplete: '날 {day} 완료!',
totalMoney: '총 돈: $',
capacityUpgrade: '용량\n업그레이드\n$',
regularUpgrade: '일반\n업그레이드\n$',
enhancedUpgrade: '향상된\n업그레이드\n$',
customerSpeedUpgrade: '고객 속도\n업그레이드\n$',
nextDay: '다음 날',
specialAddonSelection: '특별 애드온 선택!',
rollDice: '굴리기',
upgradeQuestion: '업그레이드 하시겠습니까?',
addonQuestion: '이 애드온을 선택하시겠습니까?',
cost: '비용: $',
howToPlayTitle: '게임 방법',
howToPlayText: '게임 목표:\n약국을 관리하여 돈을 벌고 $10,000에 도달하세요!\n\n고객:\n• 고객을 클릭하여 세부 정보 확인\n• 일반 약물: 안전하지만 적은 돈\n• 향상된 약물: 위험하지만 많은 돈\n\n고객 유형:\n• 의심스러운: 향상된 약물을 원함, 일반 약물 시 처벌\n• 신뢰할 만한: 70% 확률로 신뢰할 수 있습니다\n• 신뢰할 수 없는: 30% 확률로 신뢰할 수 있습니다\n• VIP: 2배 돈 제공\n\n업그레이드:\n• 용량: 더 많은 고객 동시 수용\n• 일반 약물: 더 높은 수익\n• 향상된 약물: 더 높은 배수\n• 고객 속도: 더 빠른 고객 도착\n\n특별 애드온:\n특정 날에 특별한 능력을 얻을 수 있습니다!'
},
italian: {
money: 'Denaro: $',
day: 'Giorno ',
time: 'Tempo: ',
capacity: 'Capacità: ',
rollRights: 'Diritti di Lancio: ',
mode: 'Modalità: ',
clickCustomer: 'Clicca su un cliente per vedere i dettagli',
regularMedicine: 'Regolare ($',
enhancedMedicine: 'Potenziato (',
profit: 'x profitto)',
gameTitle: 'Re della Farmacia',
gameSubtitle: 'Gestisci la tua farmacia \ne servi i tuoi clienti!',
start: 'INIZIA',
settings: 'IMPOSTAZIONI',
difficulty: 'DIFFICOLTÀ: ',
easy: 'FACILE',
normal: 'NORMALE',
hard: 'DIFFICILE',
back: 'INDIETRO',
volumeLevel: 'LIVELLO VOLUME',
languageSelection: 'SELEZIONE LINGUA',
yes: 'SÌ',
no: 'NO',
dayComplete: 'Giorno {day} Completato!',
totalMoney: 'Denaro Totale: $',
capacityUpgrade: 'Potenziamento\nCapacità\n$',
regularUpgrade: 'Potenziamento\nRegolare\n$',
enhancedUpgrade: 'Potenziamento\nAvanzato\n$',
customerSpeedUpgrade: 'Potenziamento\nVelocità Cliente\n$',
nextDay: 'Giorno Successivo',
specialAddonSelection: 'Selezione Addon Speciale!',
rollDice: 'Lancia',
upgradeQuestion: 'Vuoi potenziare?',
addonQuestion: 'Vuoi selezionare questo addon?',
cost: 'Costo: $'
},
german: {
money: 'Geld: $',
day: 'Tag ',
time: 'Zeit: ',
capacity: 'Kapazität: ',
rollRights: 'Würfelrechte: ',
mode: 'Modus: ',
clickCustomer: 'Klicken Sie auf einen Kunden für Details',
regularMedicine: 'Normal ($',
enhancedMedicine: 'Verstärkt (',
profit: 'x Gewinn)',
gameTitle: 'Apotheken König',
gameSubtitle: 'Verwalten Sie Ihre Apotheke \nund bedienen Sie Ihre Kunden!',
start: 'START',
settings: 'EINSTELLUNGEN',
difficulty: 'SCHWIERIGKEIT: ',
easy: 'EINFACH',
normal: 'NORMAL',
hard: 'SCHWER',
back: 'ZURÜCK',
volumeLevel: 'LAUTSTÄRKE',
languageSelection: 'SPRACHAUSWAHL',
yes: 'JA',
no: 'NEIN',
dayComplete: 'Tag {day} Abgeschlossen!',
totalMoney: 'Gesamtgeld: $',
capacityUpgrade: 'Kapazitäts\nUpgrade\n$',
regularUpgrade: 'Normal\nUpgrade\n$',
enhancedUpgrade: 'Verstärkt\nUpgrade\n$',
customerSpeedUpgrade: 'Kundengeschwindigkeit\nUpgrade\n$',
nextDay: 'Nächster Tag',
specialAddonSelection: 'Spezielle Addon-Auswahl!',
rollDice: 'Würfeln',
upgradeQuestion: 'Möchten Sie upgraden?',
addonQuestion: 'Möchten Sie dieses Addon auswählen?',
cost: 'Kosten: $'
},
russian: {
money: 'Деньги: $',
day: 'День ',
time: 'Время: ',
capacity: 'Вместимость: ',
rollRights: 'Права на Бросок: ',
mode: 'Режим: ',
clickCustomer: 'Нажмите на клиента для подробностей',
regularMedicine: 'Обычное ($',
enhancedMedicine: 'Усиленное (',
profit: 'x прибыль)',
gameTitle: 'Король Аптек',
gameSubtitle: 'Управляйте своей аптекой \nи обслуживайте клиентов!',
start: 'НАЧАТЬ',
settings: 'НАСТРОЙКИ',
difficulty: 'СЛОЖНОСТЬ: ',
easy: 'ЛЕГКО',
normal: 'НОРМАЛЬНО',
hard: 'СЛОЖНО',
back: 'НАЗАД',
volumeLevel: 'УРОВЕНЬ ГРОМКОСТИ',
languageSelection: 'ВЫБОР ЯЗЫКА',
yes: 'ДА',
no: 'НЕТ',
dayComplete: 'День {day} Завершен!',
totalMoney: 'Общие Деньги: $',
capacityUpgrade: 'Улучшение\nВместимости\n$',
regularUpgrade: 'Обычное\nУлучшение\n$',
enhancedUpgrade: 'Усиленное\nУлучшение\n$',
customerSpeedUpgrade: 'Улучшение\nСкорости Клиентов\n$',
nextDay: 'Следующий День',
specialAddonSelection: 'Выбор Специального Дополнения!',
rollDice: 'Бросить',
upgradeQuestion: 'Хотите улучшить?',
addonQuestion: 'Хотите выбрать это дополнение?',
cost: 'Стоимость: $'
}
}, "italian", {
money: 'Denaro: $',
day: 'Giorno ',
time: 'Tempo: ',
capacity: 'Capacità: ',
rollRights: 'Diritti di Lancio: ',
mode: 'Modalità: ',
clickCustomer: 'Clicca su un cliente per vedere i dettagli',
regularMedicine: 'Regolare ($',
enhancedMedicine: 'Potenziato (',
profit: 'x profitto)',
gameTitle: 'Re della Farmacia',
gameSubtitle: 'Gestisci la tua farmacia \ne servi i tuoi clienti!',
start: 'INIZIA',
settings: 'IMPOSTAZIONI',
howToPlay: 'COME GIOCARE',
difficulty: 'DIFFICOLTÀ: ',
easy: 'FACILE',
normal: 'NORMALE',
hard: 'DIFFICILE',
back: 'INDIETRO',
volumeLevel: 'LIVELLO VOLUME',
languageSelection: 'SELEZIONE LINGUA',
yes: 'SÌ',
no: 'NO',
dayComplete: 'Giorno {day} Completato!',
totalMoney: 'Denaro Totale: $',
capacityUpgrade: 'Potenziamento\nCapacità\n$',
regularUpgrade: 'Potenziamento\nRegolare\n$',
enhancedUpgrade: 'Potenziamento\nAvanzato\n$',
customerSpeedUpgrade: 'Potenziamento\nVelocità Cliente\n$',
nextDay: 'Giorno Successivo',
specialAddonSelection: 'Selezione Addon Speciale!',
rollDice: 'Lancia',
upgradeQuestion: 'Vuoi potenziare?',
addonQuestion: 'Vuoi selezionare questo addon?',
cost: 'Costo: $',
howToPlayTitle: 'COME GIOCARE',
howToPlayText: 'OBIETTIVO DEL GIOCO:\nGestisci la tua farmacia per guadagnare denaro e raggiungere $10,000!\n\nCLIENTI:\n• Clicca sui clienti per vedere i dettagli\n• Medicina regolare: Sicura ma meno denaro\n• Medicina potenziata: Rischiosa ma più denaro\n\nTIPI DI CLIENTI:\n• Sospetto: Vuole medicina potenziata, penalità per regolare\n• Affidabile: Puoi fidarti di loro il 70% delle volte\n• Non affidabile: Puoi fidarti di loro il 30% delle volte\n• VIP: Dà 2x denaro\n\nPOTENZIAMENTI:\n• Capacità: Più clienti contemporaneamente\n• Medicina regolare: Guadagni più alti\n• Medicina potenziata: Moltiplicatore più alto\n• Velocità clienti: Arrivi clienti più veloci\n\nADDON SPECIALI:\nIn certi giorni puoi ottenere abilità speciali!'
}), "german", {
money: 'Geld: $',
day: 'Tag ',
time: 'Zeit: ',
capacity: 'Kapazität: ',
rollRights: 'Würfelrechte: ',
mode: 'Modus: ',
clickCustomer: 'Klicken Sie auf einen Kunden für Details',
regularMedicine: 'Normal ($',
enhancedMedicine: 'Verstärkt (',
profit: 'x Gewinn)',
gameTitle: 'Apotheken König',
gameSubtitle: 'Verwalten Sie Ihre Apotheke \nund bedienen Sie Ihre Kunden!',
start: 'START',
settings: 'EINSTELLUNGEN',
howToPlay: 'SPIELANLEITUNG',
difficulty: 'SCHWIERIGKEIT: ',
easy: 'EINFACH',
normal: 'NORMAL',
hard: 'SCHWER',
back: 'ZURÜCK',
volumeLevel: 'LAUTSTÄRKE',
languageSelection: 'SPRACHAUSWAHL',
yes: 'JA',
no: 'NEIN',
dayComplete: 'Tag {day} Abgeschlossen!',
totalMoney: 'Gesamtgeld: $',
capacityUpgrade: 'Kapazitäts\nUpgrade\n$',
regularUpgrade: 'Normal\nUpgrade\n$',
enhancedUpgrade: 'Verstärkt\nUpgrade\n$',
customerSpeedUpgrade: 'Kundengeschwindigkeit\nUpgrade\n$',
nextDay: 'Nächster Tag',
specialAddonSelection: 'Spezielle Addon-Auswahl!',
rollDice: 'Würfeln',
upgradeQuestion: 'Möchten Sie upgraden?',
addonQuestion: 'Möchten Sie dieses Addon auswählen?',
cost: 'Kosten: $',
howToPlayTitle: 'SPIELANLEITUNG',
howToPlayText: 'SPIELZIEL:\nVerwalten Sie Ihre Apotheke, um Geld zu verdienen und $10,000 zu erreichen!\n\nKUNDEN:\n• Klicken Sie auf Kunden für Details\n• Normale Medizin: Sicher aber weniger Geld\n• Verstärkte Medizin: Riskant aber mehr Geld\n\nKUNDENTYPEN:\n• Verdächtig: Will verstärkte Medizin, Strafe für normale\n• Vertrauenswürdig: Sie können ihnen 70% der Zeit vertrauen\n• Nicht vertrauenswürdig: Sie können ihnen 30% der Zeit vertrauen\n• VIP: Gibt 2x Geld\n\nUPGRADES:\n• Kapazität: Mehr Kunden gleichzeitig\n• Normale Medizin: Höhere Einnahmen\n• Verstärkte Medizin: Höherer Multiplikator\n• Kundengeschwindigkeit: Schnellere Kundenankünfte\n\nSPEZIELLE ADDONS:\nAn bestimmten Tagen können Sie spezielle Fähigkeiten erhalten!'
}), "russian", {
money: 'Деньги: $',
day: 'День ',
time: 'Время: ',
capacity: 'Вместимость: ',
rollRights: 'Права на Бросок: ',
mode: 'Режим: ',
clickCustomer: 'Нажмите на клиента для подробностей',
regularMedicine: 'Обычное ($',
enhancedMedicine: 'Усиленное (',
profit: 'x прибыль)',
gameTitle: 'Король Аптек',
gameSubtitle: 'Управляйте своей аптекой \nи обслуживайте клиентов!',
start: 'НАЧАТЬ',
settings: 'НАСТРОЙКИ',
howToPlay: 'КАК ИГРАТЬ',
difficulty: 'СЛОЖНОСТЬ: ',
easy: 'ЛЕГКО',
normal: 'НОРМАЛЬНО',
hard: 'СЛОЖНО',
back: 'НАЗАД',
volumeLevel: 'УРОВЕНЬ ГРОМКОСТИ',
languageSelection: 'ВЫБОР ЯЗЫКА',
yes: 'ДА',
no: 'НЕТ',
dayComplete: 'День {day} Завершен!',
totalMoney: 'Общие Деньги: $',
capacityUpgrade: 'Улучшение\nВместимости\n$',
regularUpgrade: 'Обычное\nУлучшение\n$',
enhancedUpgrade: 'Усиленное\nУлучшение\n$',
customerSpeedUpgrade: 'Улучшение\nСкорости Клиентов\n$',
nextDay: 'Следующий День',
specialAddonSelection: 'Выбор Специального Дополнения!',
rollDice: 'Бросить',
upgradeQuestion: 'Хотите улучшить?',
addonQuestion: 'Хотите выбрать это дополнение?',
cost: 'Стоимость: $',
howToPlayTitle: 'КАК ИГРАТЬ',
howToPlayText: 'ЦЕЛЬ ИГРЫ:\nУправляйте аптекой, чтобы заработать деньги и достичь $10,000!\n\nКЛИЕНТЫ:\n• Нажимайте на клиентов для просмотра деталей\n• Обычное лекарство: Безопасно, но меньше денег\n• Усиленное лекарство: Рискованно, но больше денег\n\nТИПЫ КЛИЕНТОВ:\n• Подозрительный: Хочет усиленное лекарство, штраф за обычное\n• Надежный: Им можно доверять в 70% случаев\n• Ненадежный: Им можно доверять в 30% случаев\n• VIP: Дает в 2 раза больше денег\n\nУЛУЧШЕНИЯ:\n• Вместимость: Больше клиентов одновременно\n• Обычное лекарство: Больше заработок\n• Усиленное лекарство: Больший множитель\n• Скорость клиентов: Более быстрые прибытия клиентов\n\nСПЕЦИАЛЬНЫЕ ДОПОЛНЕНИЯ:\nВ определенные дни вы можете получить специальные способности!'
}), 'pirate', {
money: 'Altın: $',
day: 'Gün ',
time: 'Vakit: ',
capacity: 'Ambar: ',
rollRights: 'Zar Hakkı: ',
mode: 'Seyir Tarzı: ',
clickCustomer: 'Müşteriye tıkla, sırlarını öğren bre!',
regularMedicine: 'Normal ($',
enhancedMedicine: 'Güçlü (',
profit: 'x ganimet)',
gameTitle: 'Eczane Korsanı',
gameSubtitle: 'Dükkânını döndür \nMüşteriye iksir sat!',
start: 'FIÇILARI GETİR',
settings: 'DÜMEN',
howToPlay: 'NASIL KORSAN OLUNUR',
difficulty: 'ZORLUK: ',
easy: 'KOLAY',
normal: 'ORTA',
hard: 'ZOR',
back: 'GERİ',
volumeLevel: 'SES',
languageSelection: 'LİSAN',
yes: 'AYE',
no: 'NAY',
dayComplete: 'Gün {day} bitti kaptan!',
totalMoney: 'Toplam Ganimet: $',
capacityUpgrade: 'Ambarı büyüt\n$',
regularUpgrade: 'Normali güçlendir\n$',
enhancedUpgrade: 'Kudurt\n$',
customerSpeedUpgrade: 'Müşteriye yelken bas\n$',
nextDay: 'Ertesi Gün',
specialAddonSelection: 'Özel Eklenti Seç Kaptan!',
rollDice: 'Zar Fırlat',
upgradeQuestion: 'Yükseltelim mi bre?',
addonQuestion: 'Bunu alasın mı?',
cost: 'Bedel: $',
howToPlayTitle: 'NASIL KORSAN OLUNUR',
howToPlayText: 'AMAÇ:\nDükkânını yöneterek ganimet topla ve 10,000 altına ulaş bre!\n\nMÜŞTERİLER:\n• Yolculara tıkla, sırlarını öğren\n• Normal iksir: Güvenli ama az altın\n• Güçlü iksir: Tehlikeli ama çok altın\n\nYOLCU ÇEŞİTLERİ:\n• Şüpheli: Güçlü iksir ister, normal verirsen ceza\n• Güvenilir: %70 güvenebilirsin onlara\n• Güvenilir olmayan: %30 güvenebilirsin onlara\n• Şerefli: 2 kat altın verir\n\nGÜÇLENDİRMELER:\n• Ambar: Daha fazla yolcu\n• Normal iksir: Daha çok kazanç\n• Güçlü iksir: Daha yüksek çarpan\n• Yolcu hızı: Daha hızlı müşteri\n\nÖZEL YETENEKLER:\nBelirli günlerde özel güçler kazanırsın kaptan!'
});
// Function to update all UI text based on current language
function updateAllLanguageTexts() {
var texts = languageTexts[currentLanguage];
// Update main game UI
if (moneyText) {
moneyText.setText(texts.money + money);
}
if (dayText) {
dayText.setText(texts.day + day);
}
if (rollRightsText) {
rollRightsText.setText(texts.rollRights + rollRights);
}
if (capacityText2) {
capacityText2.setText(texts.capacity + pharmacyCapacity);
}
if (customerInfoText) {
customerInfoText.setText(texts.clickCustomer);
}
if (regularLabel) {
regularLabel.setText(texts.regularMedicine + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
}
if (enhancedLabel) {
enhancedLabel.setText(texts.enhancedMedicine + enhancedMultiplier.toFixed(1) + texts.profit);
}
// Update medicine button labels
if (regularLabel) {
regularLabel.setText(texts.regularMedicine + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
}
if (enhancedLabel) {
enhancedLabel.setText(texts.enhancedMedicine + enhancedMultiplier.toFixed(1) + texts.profit);
}
// Update mode text
if (modeText) {
var modeDisplayText = gameDifficulty === 'easy' ? texts.easy : gameDifficulty === 'hard' ? texts.hard : texts.normal;
modeText.setText(texts.mode + modeDisplayText);
}
// Update timer text
if (timerText) {
var remainingTime = Math.max(0, Math.ceil((dayLength - dayTimer) / 60));
timerText.setText(texts.time + remainingTime);
}
// Update confirmation dialogs
var confirmationDialogs = game.children.filter(function (child) {
return child.constructor.name === 'ConfirmationDialog';
});
for (var i = 0; i < confirmationDialogs.length; i++) {
if (confirmationDialogs[i].updateLanguage) {
confirmationDialogs[i].updateLanguage();
}
}
// Update settings screen text if it exists
var settingsScreens = game.children.filter(function (child) {
return child.constructor.name === 'SettingsScreen';
});
if (settingsScreens.length > 0) {
var settingsScreen = settingsScreens[0];
// Find and update settings screen text elements
for (var i = 0; i < settingsScreen.children.length; i++) {
var child = settingsScreen.children[i];
if (child.constructor.name === 'Text2') {
// Update settings title
if (child.text.indexOf('AYARLAR') !== -1 || child.text.indexOf('SETTINGS') !== -1) {
child.setText(texts.settings);
}
// Update volume label
else if (child.text.indexOf('SES SEVİYESİ') !== -1 || child.text.indexOf('VOLUME LEVEL') !== -1) {
child.setText(texts.volumeLevel);
}
// Update language label
else if (child.text.indexOf('DİL SEÇİMİ') !== -1 || child.text.indexOf('LANGUAGE SELECTION') !== -1) {
child.setText(texts.languageSelection);
}
// Update back button
else if (child.text.indexOf('GERİ') !== -1 || child.text.indexOf('BACK') !== -1) {
child.setText(texts.back);
}
}
}
}
// Update GameStartScreen text if it exists
for (var i = 0; i < game.children.length; i++) {
var child = game.children[i];
if (child.constructor && child.constructor.name === 'GameStartScreen' && child.updateLanguage && typeof child.updateLanguage === 'function') {
child.updateLanguage();
} else if (child.updateLanguage && typeof child.updateLanguage === 'function') {
child.updateLanguage();
}
}
}
// Add pharmacy background
var pharmacyBg = game.addChild(LK.getAsset('pharmacyBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
}));
// Show start screen
var startScreen = game.addChild(new GameStartScreen());
// UI Elements - hidden initially for start screen
var moneyText = new Text2('Para: $' + money, {
size: 80,
fill: 0x000000,
font: 'Comic Sans MS'
});
moneyText.anchor.set(0, 0);
moneyText.x = 50;
moneyText.y = 50;
moneyText.visible = false;
game.addChild(moneyText);
var rollRightsText = new Text2('Zar Hakları: ' + rollRights, {
size: 90,
fill: 0x000000,
font: 'Comic Sans MS'
});
rollRightsText.anchor.set(0, 0);
rollRightsText.x = 50;
rollRightsText.y = 130;
rollRightsText.visible = false;
game.addChild(rollRightsText);
var dayText = new Text2('Gün ' + day, {
size: 80,
fill: 0x000000,
font: 'Comic Sans MS'
});
dayText.anchor.set(1, 0);
dayText.x = 1998;
dayText.y = 50;
dayText.visible = false;
game.addChild(dayText);
var timerText = new Text2('Zaman: ' + Math.ceil((dayLength - dayTimer) / 60), {
size: 80,
fill: 0x000000,
font: 'Comic Sans MS'
});
timerText.anchor.set(0.5, 0);
timerText.x = 1024;
timerText.y = 50;
timerText.visible = false;
game.addChild(timerText);
var modeText = new Text2('', {
size: 80,
fill: 0x000000,
font: 'Comic Sans MS'
});
modeText.anchor.set(0.5, 0);
modeText.x = 1750; // Positioned between money (50) and timer (1024)
modeText.y = 175;
modeText.visible = false;
game.addChild(modeText);
var capacityText2 = new Text2('Kapasite: ' + pharmacyCapacity, {
size: 80,
fill: 0x000000,
font: 'Comic Sans MS'
});
capacityText2.anchor.set(0.5, 0);
capacityText2.x = 1511; // Positioned between timer (1024) and day (1998)
capacityText2.y = 50;
capacityText2.visible = false;
game.addChild(capacityText2);
var customerInfoText = new Text2('Ayrıntıları görmek için bir müşteriye tıklayın', {
size: 95,
fill: 0x000000,
font: 'Comic Sans MS'
});
customerInfoText.anchor.set(0.5, 0);
customerInfoText.x = 1024;
customerInfoText.y = 300;
customerInfoText.visible = false;
game.addChild(customerInfoText);
// Pharmacy counter - hidden initially
var counter = game.addChild(LK.getAsset('counter', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2500
}));
counter.visible = false;
// Medication buttons - hidden initially
var regularButton = game.addChild(new MedicationButton('regular'));
regularButton.x = 1024;
regularButton.y = 1900;
regularButton.scaleX = 2;
regularButton.scaleY = 2;
regularButton.visible = false;
var enhancedButton = game.addChild(new MedicationButton('enhanced'));
enhancedButton.x = 1024;
enhancedButton.y = 2275;
enhancedButton.scaleX = 2;
enhancedButton.scaleY = 2;
enhancedButton.visible = false;
// Button labels - hidden initially
var regularLabel = new Text2('Normal ($' + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')', {
size: 70,
fill: 0xf70505,
font: 'Comic Sans MS'
});
regularLabel.anchor.set(0.5, 0);
regularLabel.x = 1024;
regularLabel.y = 2017;
regularLabel.visible = false;
game.addChild(regularLabel);
var enhancedLabel = new Text2('Geliştirilmiş (' + enhancedMultiplier.toFixed(1) + 'x kâr)', {
size: 70,
fill: 0x228B22,
font: 'Comic Sans MS'
});
enhancedLabel.anchor.set(0.5, 0);
enhancedLabel.x = 1024;
enhancedLabel.y = 2392;
enhancedLabel.visible = false;
game.addChild(enhancedLabel);
// Define 5 fixed customer spawn positions
var customerSpawnPositions = [{
x: 204,
y: 1760
},
// Position 1
{
x: 614,
y: 1760
},
// Position 2
{
x: 1024,
y: 1760
},
// Position 3 (center)
{
x: 1434,
y: 1760
},
// Position 4
{
x: 1844,
y: 1760
} // Position 5
];
// Functions
function spawnCustomer() {
// Limit to maximum customers based on pharmacy capacity
if (customers.length >= pharmacyCapacity) {
return;
}
// Find available spawn positions
var availablePositions = [];
for (var posIndex = 0; posIndex < customerSpawnPositions.length; posIndex++) {
var position = customerSpawnPositions[posIndex];
var occupied = false;
// Check if this position is already occupied
for (var j = 0; j < customers.length; j++) {
var distance = Math.sqrt(Math.pow(customers[j].x - position.x, 2) + Math.pow(customers[j].y - position.y, 2));
if (distance < 200) {
// Reduced distance threshold since positions are fixed
occupied = true;
break;
}
}
if (!occupied) {
availablePositions.push(position);
}
}
// If no positions available, return
if (availablePositions.length === 0) {
return;
}
// Select random available position
var selectedPosition = availablePositions[Math.floor(Math.random() * availablePositions.length)];
var customer = new Customer();
customer.x = selectedPosition.x;
customer.y = selectedPosition.y;
// Start customer with small scale and fade in
customer.scaleX = 0.1;
customer.scaleY = 0.1;
customer.alpha = 0.0;
// Play customer arrival sound with saved volume
var savedVolume = storage.volume;
if (savedVolume > 0) {
LK.getSound('customerArrival').volume = savedVolume;
LK.getSound('customerArrival').play();
}
// Animate customer entrance
tween(customer, {
scaleX: 1.0,
scaleY: 1.0,
alpha: 1.0
}, {
duration: 500,
easing: tween.bounceOut
});
customer.down = function (x, y, obj) {
// Add click effect
tween(customer, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(customer, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100,
easing: tween.easeIn
});
}
});
selectedCustomer = customer;
updateCustomerInfo();
};
customers.push(customer);
game.addChild(customer);
}
function updateCustomerInfo() {
var texts = languageTexts[currentLanguage];
if (selectedCustomer && !selectedCustomer.served) {
var info = '';
if (selectedCustomer.isSuspicious) {
var suspiciousTexts = {
'turkish': 'Şüpheli Müşteri\n - Geliştirilmiş ilaçları ister',
'english': 'Suspicious Customer\n - Wants enhanced medicine',
'french': 'Client Suspect\n - Veut des médicaments améliorés',
'korean': '의심스러운 고객\n - 향상된 약을 원함',
'italian': 'Cliente Sospetto\n - Vuole medicina potenziata',
'german': 'Verdächtiger Kunde\n - Will verstärkte Medizin',
'russian': 'Подозрительный Клиент\n - Хочет усиленное лекарство',
'pirate': 'Şüpheli Yolcu\n - Güçlü iksirleri ister bre'
};
info = suspiciousTexts[currentLanguage];
} else {
var typeDescriptions = {
'turkish': {
'customer': 'Normal Yetişkin Bir Müşteri',
'customerElderly': 'Kronik Rahatsızlığı Olan Yaşlı Bir Müşteri',
'customerYoung': 'Küçük Rahatsızlıkları Olan Genç Bir Müşteri',
'customerBusiness': 'Her Zaman Aceleci Bir İş İnsanı',
'vipCustomer': 'VIP Müşteri',
'doubleCustomer': 'Çift hap müşterisi'
},
'english': {
'customer': 'Normal Adult Customer',
'customerElderly': 'Elderly Customer with Chronic Condition',
'customerYoung': 'Young Customer with Minor Issues',
'customerBusiness': 'Always Busy Business Person',
'vipCustomer': 'VIP Customer',
'doubleCustomer': 'Double pill customer'
},
'french': {
'customer': 'Client Adulte Normal',
'customerElderly': 'Client Âgé avec Condition Chronique',
'customerYoung': 'Jeune Client avec Problèmes Mineurs',
'customerBusiness': 'Personne d\'Affaires Toujours Occupée',
'vipCustomer': 'Client VIP',
'doubleCustomer': 'Client à double pilule'
},
'korean': {
'customer': '일반 성인 고객',
'customerElderly': '만성 질환이 있는 노인 고객',
'customerYoung': '가벼운 문제가 있는 젊은 고객',
'customerBusiness': '항상 바쁜 사업가',
'vipCustomer': 'VIP 고객',
'doubleCustomer': '이중 알약 고객'
},
'italian': {
'customer': 'Cliente Adulto Normale',
'customerElderly': 'Cliente Anziano con Condizione Cronica',
'customerYoung': 'Giovane Cliente con Problemi Minori',
'customerBusiness': 'Persona d\'Affari Sempre Occupata',
'vipCustomer': 'Cliente VIP',
'doubleCustomer': 'Cliente doppia pillola'
},
'german': {
'customer': 'Normaler Erwachsener Kunde',
'customerElderly': 'Älterer Kunde mit chronischer Erkrankung',
'customerYoung': 'Junger Kunde mit kleinen Problemen',
'customerBusiness': 'Immer beschäftigter Geschäftsmann',
'vipCustomer': 'VIP Kunde',
'doubleCustomer': 'Doppelpillen-Kunde'
},
'russian': {
'customer': 'Обычный Взрослый Клиент',
'customerElderly': 'Пожилой Клиент с Хроническим Заболеванием',
'customerYoung': 'Молодой Клиент с Мелкими Проблемами',
'customerBusiness': 'Всегда Занятый Деловой Человек',
'vipCustomer': 'VIP Клиент',
'doubleCustomer': 'Клиент с двойными таблетками'
},
'pirate': {
'customer': 'Sıradan yolcu',
'customerElderly': 'Yaşlı tayfa, derdi çok',
'customerYoung': 'Genç tayfa, ufak yaralı',
'customerBusiness': 'Acelecidir bu tüccar',
'vipCustomer': 'Şerefli misafir',
'doubleCustomer': 'Çift hap isteyen yolcu'
}
}[currentLanguage];
var baseDesc = typeDescriptions[selectedCustomer.customerType] || (currentLanguage === 'turkish' ? 'Normal müşteri' : 'Regular customer');
var reportTexts = {
'turkish': selectedCustomer.willReport ? 'Yasadışı Faaliyetleri Bildirebilir!' : 'Güvenilir Görünüyor',
'english': selectedCustomer.willReport ? 'Might Report Illegal Activities!' : 'Looks Trustworthy',
'french': selectedCustomer.willReport ? 'Pourrait Signaler les Activités Illégales!' : 'A l\'air Digne de Confiance',
'korean': selectedCustomer.willReport ? '불법 활동을 신고할 수 있음!' : '신뢰할 만해 보임',
'italian': selectedCustomer.willReport ? 'Potrebbe Segnalare Attività Illegali!' : 'Sembra Affidabile',
'german': selectedCustomer.willReport ? 'Könnte Illegale Aktivitäten Melden!' : 'Sieht Vertrauenswürdig Aus',
'russian': selectedCustomer.willReport ? 'Может Сообщить о Незаконной Деятельности!' : 'Выглядит Надежно',
'pirate': selectedCustomer.willReport ? 'Yasadışı işimizi liman muhafızına ispiyonlayabilir!' : 'Güvenilir görünüyor bre'
};
var reportText = reportTexts[currentLanguage];
info = baseDesc + '\n - ' + reportText;
}
customerInfoText.setText(info);
} else {
customerInfoText.setText(texts.clickCustomer);
}
}
function updateUI() {
var texts = languageTexts[currentLanguage];
moneyText.setText(texts.money + money);
dayText.setText(texts.day + day);
var remainingTime = Math.max(0, Math.ceil((dayLength - dayTimer) / 60));
timerText.setText(texts.time + remainingTime);
capacityText2.setText(texts.capacity + pharmacyCapacity);
rollRightsText.setText(texts.rollRights + rollRights);
}
function nextDay() {
// Customer end bonus - $20 per customer served
if (customerEndBonus) {
var bonusAmount = customersServedToday * 20;
money += bonusAmount;
}
// Decrease double money days
if (doubleMoneyDays > 0) {
doubleMoneyDays--;
}
day++;
dayTimer = 0;
customersServedToday = 0;
customersNeededToday = Math.floor(Math.random() * 7) + 2;
penalties = 0;
selectedCustomer = null;
// Clear remaining customers
for (var i = customers.length - 1; i >= 0; i--) {
customers[i].destroy();
}
customers = [];
// Save progress
storage.money = money;
storage.day = day;
storage.pharmacyCapacity = pharmacyCapacity;
updateCustomerInfo();
}
// Functions
function startGame() {
gameStarted = true;
gameRunning = true;
// Show all game UI elements
moneyText.visible = true;
rollRightsText.visible = true;
dayText.visible = true;
timerText.visible = true;
modeText.visible = true;
capacityText2.visible = true;
customerInfoText.visible = true;
counter.visible = true;
regularButton.visible = true;
enhancedButton.visible = true;
regularLabel.visible = true;
enhancedLabel.visible = true;
// Initialize upgrade levels
regularUpgradeLevel = 1;
enhancedUpgradeLevel = 1;
rollRights = 3;
// Set difficulty-based starting values
if (gameDifficulty === 'easy') {
money = 500;
regularUpgradeBonus = 20; // Regular 30-40 instead of 10-20
enhancedMultiplier = 2.1; // Enhanced 3x instead of 1.5x
rollRights = 6; // Easy mode gets 6 roll rights
} else if (gameDifficulty === 'normal') {
money = 250;
regularUpgradeBonus = 10; // Regular 20-30 instead of 10-20
enhancedMultiplier = 1.7; // Enhanced 2x instead of 1.5x
rollRights = 4; // Normal mode gets 4 roll rights
} else {
// hard mode
money = 100; // Keep current starting money
regularUpgradeBonus = 0; // Keep current values (10-20)
enhancedMultiplier = 1.5; // Keep current multiplier
rollRights = 2; // Hard mode gets 2 roll rights
}
// Update mode text based on selected difficulty
var modeDisplayText = gameDifficulty === 'easy' ? 'Kolay' : gameDifficulty === 'hard' ? 'Zor' : 'Orta';
modeText.setText('Mod: ' + modeDisplayText);
// Update UI elements with new values
updateUI();
regularLabel.setText('Normal ($' + (10 + regularUpgradeBonus) + '-' + (20 + regularUpgradeBonus) + ')');
enhancedLabel.setText('Geliştirilmiş (' + enhancedMultiplier.toFixed(1) + 'x kâr)');
// Apply stored volume settings to all sound effects
var savedVolume = storage.volume;
LK.getSound('cashRegister').volume = savedVolume;
LK.getSound('warning').volume = savedVolume;
LK.getSound('customerArrival').volume = savedVolume;
if (savedVolume > 0) {
LK.playMusic('gameplayMusic', {
fade: {
start: 0,
end: savedVolume,
duration: 100
}
});
} else {}
// Apply current language to all text elements
currentLanguage = storage.language || 'turkish';
updateAllLanguageTexts();
}
// Event handlers
game.update = function () {
if (!gameStarted || !gameRunning) {
return;
}
dayTimer++;
// Check if day time is over AND no customers remain
if (dayTimer >= dayLength && customers.length === 0) {
dayTimer = dayLength; // Prevent timer from going below 0
gameRunning = false;
// Check if this is a special upgrade day (2, 4, 6, 8)
if ((day === 2 || day === 4 || day === 6 || day === 8) && !endOfDayMenu) {
var specialUpgradeMenu = game.addChild(new SpecialUpgradeMenu());
} else if (!endOfDayMenu) {
endOfDayMenu = game.addChild(new EndOfDayMenu());
}
return;
}
// Clamp dayTimer to prevent negative display
if (dayTimer > dayLength) {
dayTimer = dayLength;
}
// Spawn customers randomly - faster with upgrades (only if time hasn't run out)
var baseSpawnRate = 120;
var adjustedSpawnRate = Math.max(30, baseSpawnRate - customerSpeedUpgrade * 10);
var spawnProbability = Math.min(0.95, 0.7 + customerSpeedUpgrade * 0.05);
if (dayTimer < dayLength && LK.ticks % adjustedSpawnRate === 0 && Math.random() < spawnProbability) {
spawnCustomer();
}
// Remove served customers
for (var i = customers.length - 1; i >= 0; i--) {
var customer = customers[i];
if (customer.served && customer.alpha <= 0) {
customers.splice(i, 1);
customersServedToday++;
}
}
// Check win condition
if (money >= 10000) {
LK.showYouWin();
}
// Check lose condition
if (money < 0) {
LK.showGameOver();
}
updateUI();
};
normal bir customer çiz önden bakılmış bir şekilde. In-Game asset. 2d. High contrast. No shadows
2d iş adamı bir customer çiz önden bakılmış şekilde. In-Game asset. 2d. High contrast. No shadows
bana keko gözüken bir customer çiz 2d olsun önden gözüksün. In-Game asset. 2d. High contrast. No shadows
daire şeklinde olsun görsel izometrik açıdan bakalım ilaç resmi olsun normal içilen ilaç. In-Game asset. 2d. High contrast. No shadows
arka planı mavi değil yeşil olsun
dikdörtgen şeklinde bir counter yapacaksın ama sadece counter insan falan olmucak ve biz bu countera üstten bakıyoruz 2d olsun. Üstünde bir kaç ilaç resmi olabilir ama ortasında olmasın sağında ve solunda olsun. In-Game asset. 2d. High contrast. No shadows
vip bir customer çiz sarı ceketli olsun ve sarı saçlı olsun önden bakılmış bir şekilde. In-Game asset. 2d. High contrast. No shadows. In-Game asset. 2d. High contrast. No shadows
çok hasta bir kadın customer çiz önden bakılmış bir şekilde yazısız olsun. In-Game asset. 2d. High contrast. No shadows. In-Game asset. 2d. High contrast. No shadows