User prompt
bazı araçlarda tamir süresi 5 veya 6 gün yazıyor ve ertesi gün tamirden çıkıyor, bunun olaması gerek. max 3 gün tamir süresi olucak ve gün atladıkça tamir süresi azalacak ve gün sayısı 0 olduğunda araç tamir edilmiş ve satışa hazır halde olucak
User prompt
tamir süreleri max 3 gün olmalı ve hala tamirin süresi oyunda yazan tamir süresi boyunca sürmüyor
User prompt
hala aynı sorun devam etmekte oyunda yazan tamir süresi kadar sürmüyor ertesi gün tamir edilmiş oluyor, bu sorunu çözüp oyunda yazdığı gün kadar araç tamirde kalmalı
User prompt
tamir süreleri uzun olmuş biraz azalatalım
User prompt
tamir edilen araçlar hasar durumuna göre bir kaç gün tamir yerinde kalmalı ve satılamamalı ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
şuanda düzeldi. oyuna birde sahip olduğum araçları tamir etmedende satma sistemi ekliyelim. eğer aracı tamir ettirirsem daha yüksek fiyata satacağım aracı fakat tamir ettirmezsem düşük bir fiyata satılacak
User prompt
hala tamir ettirdiğimde aracın bilgileri gözükmüyor
User prompt
şuanda aracı tamir ettirdiğim zaman araç yeşile döndü fakat hala aracın bilgileri gözükmüyor
User prompt
aracı tamir ettirmeden önce bilgileri gözüküyor fakat tamir ettirdikten sonra o aracın bilgileri gözükmüyor
User prompt
şuanda hala aynı şekilde aracı tamir ettiğimde aracın marka modeli ve bilgileri kayboluyor
User prompt
sahip olduğum aracı tamir ettirdiğim zaman araç bilgileri kayboluyor ve görüntüde hala kırmızı olarak kalıyor
User prompt
sahip olduğum araçları ne kadara satacağım yazmıyor onun yazmasını sağlamalıyız
User prompt
"Pay Debt" butonunu azıcık yukarı götür
User prompt
"Pay Debt" butonunu aşırı azıcık sola götür
User prompt
"Pay Debt" butonunu aşırı azıcık sola götür
User prompt
"View Owned Cars" butonunu ve "Next Day" butonunu biraz yukarı götür
User prompt
"Pay Debt" butonunu çok az sağa götür
User prompt
"Pay Debt" butonunu azıcık sağa götür
User prompt
"Pay Debt" butonunu çok az sağa ve çok az aşağı götür
User prompt
"Pay Debt" butonunu biraz sola götür
User prompt
"Pay Debt" butonunu biraz sağa birazda yukarı götür
User prompt
"Next Day" butonunu biraz yukarı götür
User prompt
"View Owned Cars" butonunu biraz daha yukarı götür
User prompt
"View Owned Cars" butonunu biraz yukarı götür
User prompt
"Take Loan" butonunu biraz sola götür
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Button = Container.expand(function (text, color, width, height) { var self = Container.call(this); var buttonGraphics = self.attachAsset('buyButton', { anchorX: 0.5, anchorY: 0.5, width: width || 300, height: height || 120 }); buttonGraphics.tint = color || 0x27ae60; var buttonText = new Text2(text, { size: 32, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); buttonText.x = 0; buttonText.y = 0; self.addChild(buttonText); self.down = function (x, y, obj) { buttonGraphics.scaleX = 0.9; buttonGraphics.scaleY = 0.9; }; self.up = function (x, y, obj) { buttonGraphics.scaleX = 1.0; buttonGraphics.scaleY = 1.0; }; return self; }); var Vehicle = Container.expand(function (carData) { var self = Container.call(this); self.carData = carData; self.inspected = false; self.repaired = false; var carGraphics = self.attachAsset(carData.condition === 'damaged' ? 'carDamaged' : 'carOffer', { anchorX: 0.5, anchorY: 0.5 }); var carText = new Text2(carData.make + ' ' + carData.model, { size: 36, fill: 0xFFFFFF }); carText.anchor.set(0.5, 0.5); carText.x = 0; carText.y = -80; self.addChild(carText); var priceText = new Text2('$' + carData.price.toLocaleString(), { size: 40, fill: 0xFFFF00 }); priceText.anchor.set(0.5, 0.5); priceText.x = 0; priceText.y = -40; self.addChild(priceText); var conditionText = new Text2(carData.condition + ' - ' + carData.mileage + 'k miles', { size: 28, fill: 0xFFFFFF }); conditionText.anchor.set(0.5, 0.5); conditionText.x = 0; conditionText.y = 10; self.addChild(conditionText); self.updateDisplay = function () { carGraphics.visible = false; self.removeChild(carGraphics); var assetType = 'carOffer'; if (self.carData.condition === 'damaged') { assetType = 'carDamaged'; } else if (self.repaired) { assetType = 'carRepaired'; } carGraphics = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0.5 }); priceText.setText('$' + self.carData.price.toLocaleString()); conditionText.setText(self.carData.condition + ' - ' + self.carData.mileage + 'k miles'); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x34495e }); /**** * Game Code ****/ // Game state variables var playerMoney = storage.playerMoney || 50000; var currentDay = storage.currentDay || 1; var playerDebt = storage.playerDebt || 0; var dailyInterestRate = 0.05; // 5% daily interest var taxDebt = storage.taxDebt || 0; var taxDueDate = storage.taxDueDate || 0; var taxOverdueDate = storage.taxOverdueDate || 0; var lastTaxDay = storage.lastTaxDay || 0; var ownedVehicles = []; // Load owned vehicles from storage if (storage.vehicleCount) { for (var i = 0; i < storage.vehicleCount; i++) { ownedVehicles.push({ make: storage.vehicleMakes[i], model: storage.vehicleModels[i], condition: storage.vehicleConditions[i], actualCondition: storage.vehicleActualConditions[i], mileage: storage.vehicleMileages[i], actualMileage: storage.vehicleActualMileages[i] || storage.vehicleMileages[i], price: storage.vehiclePrices[i], marketValue: storage.vehicleMarketValues[i], sellerLying: storage.vehicleSellerLying[i], id: storage.vehicleIds[i], repaired: storage.vehicleRepaired[i] }); } } var dailyOffers = []; var selectedVehicle = null; var gameState = 'daily_offers'; // 'daily_offers', 'vehicle_selected', 'owned_vehicles' // Car data arrays var carMakes = ['Toyota', 'Honda', 'Ford', 'Chevrolet', 'BMW', 'Mercedes', 'Audi', 'Nissan', 'Volkswagen', 'Hyundai']; var carModels = ['Sedan', 'SUV', 'Coupe', 'Hatchback', 'Wagon', 'Convertible', 'Truck', 'Compact']; var conditions = ['excellent', 'good', 'fair', 'poor', 'damaged']; // UI Elements var moneyText = new Text2('Money: $' + playerMoney.toLocaleString(), { size: 50, fill: 0x2ECC71 }); moneyText.anchor.set(0, 0); moneyText.x = 120; moneyText.y = 50; LK.gui.topLeft.addChild(moneyText); var dayText = new Text2('Day ' + currentDay, { size: 50, fill: 0xFFFFFF }); dayText.anchor.set(1, 0); dayText.x = 0; dayText.y = 50; LK.gui.topRight.addChild(dayText); var debtText = new Text2('Debt: $' + playerDebt.toLocaleString(), { size: 40, fill: 0xe74c3c }); debtText.anchor.set(0, 0); debtText.x = 120; debtText.y = 110; LK.gui.topLeft.addChild(debtText); var taxText = new Text2('Tax: $' + taxDebt.toLocaleString(), { size: 40, fill: 0xe74c3c }); taxText.anchor.set(0, 0); taxText.x = 120; taxText.y = 170; LK.gui.topLeft.addChild(taxText); var titleText = new Text2('Car Dealer Tycoon', { size: 80, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0); titleText.x = 2048 / 2; titleText.y = 150; game.addChild(titleText); var stateText = new Text2('Daily Vehicle Offers', { size: 50, fill: 0xECF0F1 }); stateText.anchor.set(0.5, 0); stateText.x = 2048 / 2; stateText.y = 250; game.addChild(stateText); // Action buttons var inspectButton = game.addChild(new Button('Inspect ($500)', 0xf39c12)); inspectButton.x = 2048 / 2 - 400; inspectButton.y = 2200; inspectButton.visible = false; var buyButton = game.addChild(new Button('Buy Vehicle', 0x27ae60)); buyButton.x = 2048 / 2 - 150; buyButton.y = 2200; buyButton.visible = false; var negotiateButton = game.addChild(new Button('Negotiate', 0x34495e)); negotiateButton.x = 2048 / 2 + 150; negotiateButton.y = 2200; negotiateButton.visible = false; var repairButton = game.addChild(new Button('Repair (Dynamic)', 0xe67e22)); repairButton.x = 2048 / 2 - 150; repairButton.y = 2200; repairButton.visible = false; var sellButton = game.addChild(new Button('Sell', 0x8e44ad)); sellButton.x = 2048 / 2 + 150; sellButton.y = 2200; sellButton.visible = false; var nextDayButton = game.addChild(new Button('Next Day', 0x2c3e50, 400, 140)); nextDayButton.x = 2048 / 2; nextDayButton.y = 2400; var viewOwnedButton = game.addChild(new Button('View Owned Cars', 0x95a5a6)); viewOwnedButton.x = 2048 / 2; viewOwnedButton.y = 2250; var loanButton = game.addChild(new Button('Take Loan ($10,000)', 0x3498db)); loanButton.x = 2048 / 2 - 450; loanButton.y = 2550; var payDebtButton = game.addChild(new Button('Pay Debt', 0x27ae60)); payDebtButton.x = 2048 / 2 - 50; payDebtButton.y = 2550; var payTaxButton = game.addChild(new Button('Pay Tax', 0x27ae60)); payTaxButton.x = 2048 / 2 + 450; payTaxButton.y = 2550; var resetButton = game.addChild(new Button('Reset Game', 0xe74c3c)); resetButton.x = 2048 / 2; resetButton.y = 2650; // Vehicle display containers var vehicleContainer = new Container(); vehicleContainer.x = 2048 / 2; vehicleContainer.y = 800; game.addChild(vehicleContainer); var infoText = new Text2('', { size: 32, fill: 0xFFFFFF }); infoText.anchor.set(0.5, 0.5); infoText.x = 2048 / 2; infoText.y = 1800; game.addChild(infoText); // Generate random vehicle data function generateRandomVehicle() { var make = carMakes[Math.floor(Math.random() * carMakes.length)]; var model = carModels[Math.floor(Math.random() * carModels.length)]; var condition = conditions[Math.floor(Math.random() * conditions.length)]; var mileage = Math.floor(Math.random() * 200) + 20; var basePrice = Math.floor(Math.random() * 40000) + 10000; // Sellers may lie about condition - both ways var actualCondition = condition; var actualMileage = mileage; var sellerLying = Math.random() < 0.4; // 40% chance of lying if (sellerLying) { // 70% chance they claim better condition, 30% chance they hide damage if (Math.random() < 0.7 && condition !== 'damaged') { // Claim better condition than actual var betterConditions = conditions.slice(0, conditions.indexOf(condition)); if (betterConditions.length > 0) { condition = betterConditions[Math.floor(Math.random() * betterConditions.length)]; } } else { // Hide damage - claim undamaged when actually damaged var worseConditions = conditions.slice(conditions.indexOf(condition) + 1); if (worseConditions.length > 0) { actualCondition = worseConditions[Math.floor(Math.random() * worseConditions.length)]; // If actual condition becomes damaged, they claim it's not if (actualCondition === 'damaged') { condition = 'poor'; // They claim it's just poor condition } } } } // 30% chance they also lie about mileage if (Math.random() < 0.3) { // They claim lower mileage than actual var mileageReduction = Math.floor(Math.random() * 50) + 10; // 10-60k miles less actualMileage = mileage + mileageReduction; // Cap at reasonable maximum if (actualMileage > 300) { actualMileage = 300; } } // Adjust price based on condition var priceMultiplier = 1; switch (actualCondition) { case 'excellent': priceMultiplier = 1.2; break; case 'good': priceMultiplier = 1.0; break; case 'fair': priceMultiplier = 0.8; break; case 'poor': priceMultiplier = 0.6; break; case 'damaged': priceMultiplier = 0.4; break; } var price = Math.floor(basePrice * priceMultiplier * (1 - mileage / 300)); // 15% chance that this seller is a scammer var isScammer = Math.random() < 0.15; return { make: make, model: model, condition: condition, actualCondition: actualCondition, mileage: mileage, actualMileage: actualMileage, price: price, marketValue: Math.floor(price * 1.5), sellerLying: sellerLying, isScammer: isScammer, id: Math.random().toString(36).substr(2, 9) }; } // Generate daily offers function generateDailyOffers() { dailyOffers = []; var numOffers = Math.floor(Math.random() * 3) + 2; for (var i = 0; i < numOffers; i++) { dailyOffers.push(generateRandomVehicle()); } } // Display vehicles function displayVehicles(vehicles) { vehicleContainer.removeChildren(); for (var i = 0; i < vehicles.length; i++) { var vehicle = new Vehicle(vehicles[i]); vehicle.x = i % 2 * 600 - 300; vehicle.y = Math.floor(i / 2) * 380; vehicleContainer.addChild(vehicle); vehicle.vehicleData = vehicles[i]; vehicle.down = function (x, y, obj) { selectedVehicle = obj.vehicleData; updateUI(); }; // Add buy button for each vehicle var vehicleBuyButton = new Button('Buy', 0x27ae60, 200, 80); vehicleBuyButton.x = 0; vehicleBuyButton.y = 150; vehicle.addChild(vehicleBuyButton); // Store vehicle data directly on the button using closure (function (vehicleData) { vehicleBuyButton.up = function (x, y, obj) { if (vehicleData && playerMoney >= vehicleData.price) { playerMoney -= vehicleData.price; // Check if this seller is a scammer if (vehicleData.isScammer) { // Player loses money but gets no vehicle infoText.setText('SCAMMED! The seller took your money and disappeared!\nYou lost $' + vehicleData.price.toLocaleString() + '!'); LK.effects.flashScreen(0xff0000, 1500); // Red flash for scam } else { // Normal purchase - Create a copy of the vehicle data for owned vehicles var ownedVehicleData = { make: vehicleData.make, model: vehicleData.model, condition: vehicleData.condition, actualCondition: vehicleData.actualCondition, mileage: vehicleData.mileage, actualMileage: vehicleData.actualMileage, price: vehicleData.price, marketValue: vehicleData.marketValue, sellerLying: vehicleData.sellerLying, id: vehicleData.id, repaired: false }; ownedVehicles.push(ownedVehicleData); LK.getSound('purchase').play(); } // Remove from daily offers in both cases for (var j = 0; j < dailyOffers.length; j++) { if (dailyOffers[j].id === vehicleData.id) { dailyOffers.splice(j, 1); break; } } selectedVehicle = null; updateMoneyDisplay(); displayVehicles(dailyOffers); updateUI(); saveGame(); } }; })(vehicles[i]); } } // Update UI based on game state function updateUI() { inspectButton.visible = false; buyButton.visible = false; negotiateButton.visible = false; repairButton.visible = false; sellButton.visible = false; expertiseButton.visible = false; if (gameState === 'daily_offers' && selectedVehicle) { inspectButton.visible = true; buyButton.visible = true; negotiateButton.visible = true; expertiseButton.visible = true; // Calculate expertise cost based on vehicle price (15-20% of price) var expertiseCost = Math.floor(selectedVehicle.price * (Math.random() * 0.05 + 0.15)); // Minimum expertise cost of $1000 if (expertiseCost < 1000) { expertiseCost = 1000; } // Update expertise button text with dynamic cost expertiseButton.children[0].setText('Expertise ($' + expertiseCost.toLocaleString() + ')'); infoText.setText('Selected: ' + selectedVehicle.make + ' ' + selectedVehicle.model + '\nCondition: ' + selectedVehicle.condition + '\nMileage: ' + selectedVehicle.mileage + 'k miles' + '\nPrice: $' + selectedVehicle.price.toLocaleString()); } else if (gameState === 'owned_vehicles' && selectedVehicle) { if (selectedVehicle.actualCondition === 'damaged' && !selectedVehicle.repaired) { repairButton.visible = true; } else { sellButton.visible = true; } infoText.setText('Owned: ' + selectedVehicle.make + ' ' + selectedVehicle.model + '\nCondition: ' + selectedVehicle.actualCondition + '\nMileage: ' + selectedVehicle.actualMileage + 'k miles' + '\nMarket Value: $' + selectedVehicle.marketValue.toLocaleString()); } else { infoText.setText('Select a vehicle to view options'); } } // Add expertise button var expertiseButton = game.addChild(new Button('Expertise (Dynamic)', 0x9b59b6)); expertiseButton.x = 2048 / 2 + 400; expertiseButton.y = 2200; expertiseButton.visible = false; // Button event handlers inspectButton.up = function (x, y, obj) { if (selectedVehicle && playerMoney >= 500) { playerMoney -= 500; selectedVehicle.inspected = true; selectedVehicle.condition = selectedVehicle.actualCondition; LK.getSound('inspect').play(); updateMoneyDisplay(); displayVehicles(dailyOffers); updateUI(); if (selectedVehicle.sellerLying || selectedVehicle.mileage !== selectedVehicle.actualMileage) { var lieText = 'Inspection revealed the seller was lying!\n'; if (selectedVehicle.sellerLying) { lieText += 'Actual condition: ' + selectedVehicle.actualCondition + '\n'; } if (selectedVehicle.mileage !== selectedVehicle.actualMileage) { lieText += 'Actual mileage: ' + selectedVehicle.actualMileage + 'k miles'; } infoText.setText(lieText); } else { infoText.setText('Inspection confirmed seller was honest.'); } } }; expertiseButton.up = function (x, y, obj) { if (selectedVehicle) { // Calculate expertise cost based on vehicle price (15-20% of price) var expertiseCost = Math.floor(selectedVehicle.price * (Math.random() * 0.05 + 0.15)); // Minimum expertise cost of $1000 if (expertiseCost < 1000) { expertiseCost = 1000; } if (playerMoney >= expertiseCost) { playerMoney -= expertiseCost; selectedVehicle.inspected = true; selectedVehicle.condition = selectedVehicle.actualCondition; LK.getSound('inspect').play(); updateMoneyDisplay(); displayVehicles(dailyOffers); updateUI(); var detailsText = 'EXPERTISE REPORT (Cost: $' + expertiseCost.toLocaleString() + '):\n'; detailsText += 'True Condition: ' + selectedVehicle.actualCondition + '\n'; detailsText += 'Claimed Mileage: ' + selectedVehicle.mileage + 'k miles\n'; detailsText += 'Actual Mileage: ' + selectedVehicle.actualMileage + 'k miles\n'; detailsText += 'Mileage Honest: ' + (selectedVehicle.mileage === selectedVehicle.actualMileage ? 'YES' : 'NO') + '\n'; detailsText += 'Seller Honest: ' + (selectedVehicle.sellerLying ? 'NO' : 'YES') + '\n'; detailsText += 'Market Value: $' + selectedVehicle.marketValue.toLocaleString() + '\n'; detailsText += 'Seller Trustworthy: ' + (selectedVehicle.isScammer ? 'SUSPICIOUS - POSSIBLE SCAMMER!' : 'YES') + '\n'; detailsText += 'Recommended Action: '; if (selectedVehicle.isScammer) { detailsText += 'AVOID - HIGH SCAM RISK!'; } else if (selectedVehicle.price < selectedVehicle.marketValue * 0.8) { detailsText += 'BUY - Good Deal'; } else if (selectedVehicle.price > selectedVehicle.marketValue * 1.2) { detailsText += 'AVOID - Overpriced'; } else { detailsText += 'NEGOTIATE - Fair Price'; } infoText.setText(detailsText); } else { infoText.setText('Not enough money! Expertise costs $' + expertiseCost.toLocaleString()); } } }; buyButton.up = function (x, y, obj) { if (selectedVehicle && playerMoney >= selectedVehicle.price) { playerMoney -= selectedVehicle.price; // Check if this seller is a scammer if (selectedVehicle.isScammer) { // Player loses money but gets no vehicle infoText.setText('SCAMMED! The seller took your money and disappeared!\nYou lost $' + selectedVehicle.price.toLocaleString() + '!'); LK.effects.flashScreen(0xff0000, 1500); // Red flash for scam } else { // Normal purchase selectedVehicle.actualCondition = selectedVehicle.actualCondition; ownedVehicles.push(selectedVehicle); LK.getSound('purchase').play(); } // Remove from daily offers in both cases for (var i = 0; i < dailyOffers.length; i++) { if (dailyOffers[i].id === selectedVehicle.id) { dailyOffers.splice(i, 1); break; } } selectedVehicle = null; updateMoneyDisplay(); displayVehicles(dailyOffers); updateUI(); saveGame(); } }; negotiateButton.up = function (x, y, obj) { if (selectedVehicle) { var reduction = Math.floor(selectedVehicle.price * (Math.random() * 0.2 + 0.05)); selectedVehicle.price -= reduction; displayVehicles(dailyOffers); updateUI(); infoText.setText('Negotiated $' + reduction.toLocaleString() + ' off the price!'); } }; repairButton.up = function (x, y, obj) { if (selectedVehicle) { // Calculate repair cost based on vehicle price (10-25% of price) var repairCost = Math.floor(selectedVehicle.price * (Math.random() * 0.15 + 0.10)); // Minimum repair cost of $1000 if (repairCost < 1000) { repairCost = 1000; } if (playerMoney >= repairCost) { playerMoney -= repairCost; selectedVehicle.repaired = true; selectedVehicle.actualCondition = 'good'; selectedVehicle.marketValue = Math.floor(selectedVehicle.marketValue * 1.5); LK.getSound('repair').play(); updateMoneyDisplay(); displayOwnedVehicles(); updateUI(); saveGame(); infoText.setText('Repaired for $' + repairCost.toLocaleString() + '!'); } else { infoText.setText('Not enough money! Repair costs $' + repairCost.toLocaleString()); } } }; sellButton.up = function (x, y, obj) { if (selectedVehicle) { var salePrice = Math.floor(selectedVehicle.marketValue * (Math.random() * 0.3 + 0.8)); playerMoney += salePrice; // Remove from owned vehicles for (var i = 0; i < ownedVehicles.length; i++) { if (ownedVehicles[i].id === selectedVehicle.id) { ownedVehicles.splice(i, 1); break; } } LK.getSound('sale').play(); selectedVehicle = null; updateMoneyDisplay(); displayOwnedVehicles(); updateUI(); saveGame(); infoText.setText('Sold for $' + salePrice.toLocaleString() + '!'); } }; nextDayButton.up = function (x, y, obj) { currentDay++; selectedVehicle = null; generateDailyOffers(); gameState = 'daily_offers'; stateText.setText('Daily Vehicle Offers'); dayText.setText('Day ' + currentDay); displayVehicles(dailyOffers); updateUI(); // Add random daily expenses var dailyExpenses = Math.floor(Math.random() * 5000) + 1000; // Between $1000-$6000 playerMoney -= dailyExpenses; var expenseText = 'Daily expenses: $' + dailyExpenses.toLocaleString() + ' (rent, utilities, staff wages)'; // Add maintenance costs for owned vehicles var maintenanceCosts = applyMaintenanceCosts(); if (maintenanceCosts > 0) { expenseText += '\nVehicle maintenance: $' + maintenanceCosts.toLocaleString(); } // Add insurance costs based on number of owned vehicles var insuranceCost = ownedVehicles.length * 150; if (insuranceCost > 0) { playerMoney -= insuranceCost; expenseText += '\nInsurance: $' + insuranceCost.toLocaleString(); } // Random unexpected repairs (10% chance per owned vehicle) var unexpectedRepairs = 0; for (var i = 0; i < ownedVehicles.length; i++) { if (Math.random() < 0.1) { var repairCost = Math.floor(Math.random() * 2000) + 500; unexpectedRepairs += repairCost; } } if (unexpectedRepairs > 0) { playerMoney -= unexpectedRepairs; expenseText += '\nUnexpected repairs: $' + unexpectedRepairs.toLocaleString(); } // Apply vehicle depreciation applyVehicleDepreciation(); // Apply daily interest on debt var interestCharge = 0; if (playerDebt > 0) { interestCharge = Math.floor(playerDebt * dailyInterestRate); playerDebt += interestCharge; expenseText += '\nDebt interest: $' + interestCharge.toLocaleString(); } // Tax system - every 7 days if (currentDay % 7 === 1 && currentDay > lastTaxDay) { // Calculate total vehicle value var totalVehicleValue = 0; for (var i = 0; i < ownedVehicles.length; i++) { totalVehicleValue += ownedVehicles[i].marketValue; } // Tax is 8% of total assets (money + vehicles) var taxAmount = Math.floor((playerMoney + totalVehicleValue) * 0.08); taxDebt += taxAmount; taxDueDate = currentDay + 2; // 2 days to pay taxOverdueDate = currentDay + 2; // Start charging interest after 2 days lastTaxDay = currentDay; expenseText += '\nTAX DUE: $' + taxAmount.toLocaleString() + ' (due in 2 days)'; LK.effects.flashScreen(0xffa500, 1000); // Orange flash for tax notice } // Apply tax interest if overdue (after 2 days) if (taxDebt > 0 && currentDay > taxOverdueDate) { var taxInterest = Math.floor(taxDebt * 0.15); // 15% daily interest taxDebt += taxInterest; expenseText += '\nTax interest: $' + taxInterest.toLocaleString() + ' (15% daily)'; } // Tax seizure after 14 days of unpaid tax debt if (taxDebt > 0 && currentDay > taxDueDate + 14) { var seizureAmount = Math.floor(taxDebt * 1.5); // 50% more than tax debt var actualSeizureAmount = 0; // First seize money if (playerMoney > 0) { var moneySeized = Math.min(playerMoney, seizureAmount); playerMoney -= moneySeized; actualSeizureAmount += moneySeized; seizureAmount -= moneySeized; } // Then seize vehicles if more seizure needed if (seizureAmount > 0 && ownedVehicles.length > 0) { var vehiclesSeized = []; for (var i = ownedVehicles.length - 1; i >= 0 && seizureAmount > 0; i--) { var vehicle = ownedVehicles[i]; if (vehicle.marketValue <= seizureAmount) { vehiclesSeized.push(vehicle.make + ' ' + vehicle.model); actualSeizureAmount += vehicle.marketValue; seizureAmount -= vehicle.marketValue; ownedVehicles.splice(i, 1); } } } // Clear tax debt after seizure taxDebt = 0; taxDueDate = 0; taxOverdueDate = 0; var seizureText = 'TAX SEIZURE! Assets worth $' + actualSeizureAmount.toLocaleString() + ' seized for unpaid taxes!'; if (vehiclesSeized.length > 0) { seizureText += '\nVehicles seized: ' + vehiclesSeized.join(', '); } expenseText += '\n' + seizureText; LK.effects.flashScreen(0xff0000, 2000); // Red flash for seizure // Update displays after seizure if (gameState === 'owned_vehicles') { displayOwnedVehicles(); } } updateMoneyDisplay(); updateDebtDisplay(); updateTaxDisplay(); infoText.setText(expenseText); saveGame(); }; viewOwnedButton.up = function (x, y, obj) { if (gameState === 'daily_offers') { gameState = 'owned_vehicles'; stateText.setText('Owned Vehicles'); displayOwnedVehicles(); } else { gameState = 'daily_offers'; stateText.setText('Daily Vehicle Offers'); displayVehicles(dailyOffers); } selectedVehicle = null; updateUI(); }; loanButton.up = function (x, y, obj) { var loanAmount = 10000; playerMoney += loanAmount; playerDebt += loanAmount; updateMoneyDisplay(); updateDebtDisplay(); saveGame(); infoText.setText('Loan approved! You received $' + loanAmount.toLocaleString() + '\nDaily interest: 5%'); }; payDebtButton.up = function (x, y, obj) { if (playerDebt > 0 && playerMoney > 0) { var paymentAmount = Math.min(playerMoney, playerDebt); playerMoney -= paymentAmount; playerDebt -= paymentAmount; updateMoneyDisplay(); updateDebtDisplay(); saveGame(); infoText.setText('Paid $' + paymentAmount.toLocaleString() + ' towards debt!\nRemaining debt: $' + playerDebt.toLocaleString()); } else if (playerDebt <= 0) { infoText.setText('You have no debt to pay!'); } else { infoText.setText('You need money to pay your debt!'); } }; payTaxButton.up = function (x, y, obj) { if (taxDebt > 0 && playerMoney > 0) { var paymentAmount = Math.min(playerMoney, taxDebt); playerMoney -= paymentAmount; taxDebt -= paymentAmount; updateMoneyDisplay(); updateTaxDisplay(); saveGame(); infoText.setText('Paid $' + paymentAmount.toLocaleString() + ' towards tax!\nRemaining tax: $' + taxDebt.toLocaleString()); } else if (taxDebt <= 0) { infoText.setText('You have no tax to pay!'); } else { infoText.setText('You need money to pay your tax!'); } }; resetButton.up = function (x, y, obj) { // Clear all stored data delete storage.playerMoney; delete storage.currentDay; delete storage.playerDebt; delete storage.taxDebt; delete storage.taxDueDate; delete storage.taxOverdueDate; delete storage.lastTaxDay; delete storage.vehicleCount; delete storage.vehicleMakes; delete storage.vehicleModels; delete storage.vehicleConditions; delete storage.vehicleActualConditions; delete storage.vehicleMileages; delete storage.vehicleActualMileages; delete storage.vehiclePrices; delete storage.vehicleMarketValues; delete storage.vehicleSellerLying; delete storage.vehicleIds; delete storage.vehicleRepaired; // Reset game state to initial values playerMoney = 50000; currentDay = 1; playerDebt = 0; taxDebt = 0; taxDueDate = 0; taxOverdueDate = 0; lastTaxDay = 0; ownedVehicles = []; selectedVehicle = null; gameState = 'daily_offers'; // Update UI stateText.setText('Daily Vehicle Offers'); dayText.setText('Day ' + currentDay); updateMoneyDisplay(); updateDebtDisplay(); updateTaxDisplay(); generateDailyOffers(); displayVehicles(dailyOffers); updateUI(); }; function displayOwnedVehicles() { vehicleContainer.removeChildren(); for (var i = 0; i < ownedVehicles.length; i++) { var vehicle = new Vehicle(ownedVehicles[i]); if (ownedVehicles[i].repaired) { vehicle.repaired = true; vehicle.updateDisplay(); } vehicle.x = i % 2 * 600 - 300; vehicle.y = Math.floor(i / 2) * 380; vehicleContainer.addChild(vehicle); vehicle.vehicleData = ownedVehicles[i]; vehicle.down = function (x, y, obj) { selectedVehicle = obj.vehicleData; updateUI(); }; // Add action buttons for each owned vehicle if (ownedVehicles[i].actualCondition === 'damaged' && !ownedVehicles[i].repaired) { // Add repair button with dynamic cost var repairCost = Math.floor(ownedVehicles[i].price * (Math.random() * 0.15 + 0.10)); if (repairCost < 1000) { repairCost = 1000; } var vehicleRepairButton = new Button('Repair ($' + repairCost.toLocaleString() + ')', 0xe67e22, 200, 60); vehicleRepairButton.x = -100; vehicleRepairButton.y = 150; vehicle.addChild(vehicleRepairButton); (function (vehicleData) { vehicleRepairButton.up = function (x, y, obj) { // Calculate repair cost based on vehicle price (10-25% of price) var repairCost = Math.floor(vehicleData.price * (Math.random() * 0.15 + 0.10)); // Minimum repair cost of $1000 if (repairCost < 1000) { repairCost = 1000; } if (playerMoney >= repairCost) { playerMoney -= repairCost; vehicleData.repaired = true; vehicleData.actualCondition = 'good'; vehicleData.marketValue = Math.floor(vehicleData.marketValue * 1.5); LK.getSound('repair').play(); updateMoneyDisplay(); displayOwnedVehicles(); updateUI(); saveGame(); infoText.setText('Repaired for $' + repairCost.toLocaleString() + '!'); } else { infoText.setText('Not enough money! Repair costs $' + repairCost.toLocaleString()); } }; })(ownedVehicles[i]); } else { // Add sell button var vehicleSellButton = new Button('Sell', 0x8e44ad, 200, 60); vehicleSellButton.x = -100; vehicleSellButton.y = 150; vehicle.addChild(vehicleSellButton); (function (vehicleData) { vehicleSellButton.up = function (x, y, obj) { var salePrice = Math.floor(vehicleData.marketValue * (Math.random() * 0.3 + 0.8)); playerMoney += salePrice; // Remove from owned vehicles for (var j = 0; j < ownedVehicles.length; j++) { if (ownedVehicles[j].id === vehicleData.id) { ownedVehicles.splice(j, 1); break; } } LK.getSound('sale').play(); selectedVehicle = null; updateMoneyDisplay(); displayOwnedVehicles(); updateUI(); saveGame(); infoText.setText('Sold for $' + salePrice.toLocaleString() + '!'); }; })(ownedVehicles[i]); } } } function updateMoneyDisplay() { moneyText.setText('Money: $' + playerMoney.toLocaleString()); } function updateDebtDisplay() { debtText.setText('Debt: $' + playerDebt.toLocaleString()); if (playerDebt > 0) { debtText.tint = 0xe74c3c; // Red for debt } else { debtText.tint = 0x2ecc71; // Green for no debt } } function updateTaxDisplay() { taxText.setText('Tax: $' + taxDebt.toLocaleString()); if (taxDebt > 0) { taxText.tint = 0xe74c3c; // Red for tax debt } else { taxText.tint = 0x2ecc71; // Green for no tax } } function saveGame() { storage.playerMoney = playerMoney; storage.currentDay = currentDay; storage.playerDebt = playerDebt; storage.taxDebt = taxDebt; storage.taxDueDate = taxDueDate; storage.taxOverdueDate = taxOverdueDate; storage.lastTaxDay = lastTaxDay; // Store each vehicle property as separate arrays to avoid nested objects var vehicleCount = ownedVehicles.length; storage.vehicleCount = vehicleCount; storage.vehicleMakes = []; storage.vehicleModels = []; storage.vehicleConditions = []; storage.vehicleActualConditions = []; storage.vehicleMileages = []; storage.vehicleActualMileages = []; storage.vehiclePrices = []; storage.vehicleMarketValues = []; storage.vehicleSellerLying = []; storage.vehicleIds = []; storage.vehicleRepaired = []; for (var i = 0; i < ownedVehicles.length; i++) { var vehicle = ownedVehicles[i]; storage.vehicleMakes.push(vehicle.make); storage.vehicleModels.push(vehicle.model); storage.vehicleConditions.push(vehicle.condition); storage.vehicleActualConditions.push(vehicle.actualCondition); storage.vehicleMileages.push(vehicle.mileage); storage.vehicleActualMileages.push(vehicle.actualMileage); storage.vehiclePrices.push(vehicle.price); storage.vehicleMarketValues.push(vehicle.marketValue); storage.vehicleSellerLying.push(vehicle.sellerLying); storage.vehicleIds.push(vehicle.id); storage.vehicleRepaired.push(vehicle.repaired || false); } } // Add maintenance costs for owned vehicles function applyMaintenanceCosts() { var totalMaintenanceCost = 0; for (var i = 0; i < ownedVehicles.length; i++) { var vehicle = ownedVehicles[i]; // Higher maintenance cost for damaged vehicles var baseCost = vehicle.actualCondition === 'damaged' ? 200 : 100; var maintenanceCost = Math.floor(Math.random() * baseCost) + 50; totalMaintenanceCost += maintenanceCost; } if (totalMaintenanceCost > 0) { playerMoney -= totalMaintenanceCost; return totalMaintenanceCost; } return 0; } // Apply vehicle depreciation function applyVehicleDepreciation() { for (var i = 0; i < ownedVehicles.length; i++) { var vehicle = ownedVehicles[i]; // Vehicles lose 2-5% of their market value each day var depreciationRate = Math.random() * 0.03 + 0.02; vehicle.marketValue = Math.floor(vehicle.marketValue * (1 - depreciationRate)); // Minimum market value floor if (vehicle.marketValue < 1000) { vehicle.marketValue = 1000; } } } // Initialize game updateDebtDisplay(); updateTaxDisplay(); generateDailyOffers(); displayVehicles(dailyOffers); updateUI(); // Game restart function function restartGame() { // Reset all game state variables to initial values playerMoney = 50000; currentDay = 1; playerDebt = 0; taxDebt = 0; taxDueDate = 0; taxOverdueDate = 0; lastTaxDay = 0; ownedVehicles = []; selectedVehicle = null; gameState = 'daily_offers'; // Clear storage delete storage.playerMoney; delete storage.currentDay; delete storage.playerDebt; delete storage.taxDebt; delete storage.taxDueDate; delete storage.taxOverdueDate; delete storage.lastTaxDay; delete storage.vehicleCount; delete storage.vehicleMakes; delete storage.vehicleModels; delete storage.vehicleConditions; delete storage.vehicleActualConditions; delete storage.vehicleMileages; delete storage.vehicleActualMileages; delete storage.vehiclePrices; delete storage.vehicleMarketValues; delete storage.vehicleSellerLying; delete storage.vehicleIds; delete storage.vehicleRepaired; // Update UI elements stateText.setText('Daily Vehicle Offers'); dayText.setText('Day ' + currentDay); updateMoneyDisplay(); updateDebtDisplay(); updateTaxDisplay(); generateDailyOffers(); displayVehicles(dailyOffers); updateUI(); infoText.setText('Game restarted! Welcome back to Car Dealer Tycoon!'); } // Game update loop game.update = function () { // Check for game over condition if (playerMoney < 0) { LK.showGameOver(); // Reset game state for restart restartGame(); } // Check for winning condition if (playerMoney >= 500000) { LK.showYouWin(); // Reset game state for restart restartGame(); } };
===================================================================
--- original.js
+++ change.js
@@ -202,9 +202,9 @@
sellButton.y = 2200;
sellButton.visible = false;
var nextDayButton = game.addChild(new Button('Next Day', 0x2c3e50, 400, 140));
nextDayButton.x = 2048 / 2;
-nextDayButton.y = 2450;
+nextDayButton.y = 2400;
var viewOwnedButton = game.addChild(new Button('View Owned Cars', 0x95a5a6));
viewOwnedButton.x = 2048 / 2;
viewOwnedButton.y = 2250;
var loanButton = game.addChild(new Button('Take Loan ($10,000)', 0x3498db));