/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
money: 500,
arcadeLevel: 1,
cabinetsOwned: 1
});
/****
* Classes
****/
var ArcadeCabinet = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 1;
self.broken = false;
self.customerAssigned = false;
self.earningRate = [10, 15, 25][self.type - 1];
self.repairCost = [50, 75, 100][self.type - 1];
self.breakChance = [0.001, 0.0015, 0.002][self.type - 1];
self.coinTimer = 0;
self.coinInterval = 300;
// Create cabinet graphic based on type
var assetId = 'arcadeCabinet';
if (self.type === 2) {
assetId = 'arcadeCabinet2';
}
if (self.type === 3) {
assetId = 'arcadeCabinet3';
}
self.graphic = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
// Create broken overlay (invisible by default)
self.brokenOverlay = self.attachAsset('brokenOverlay', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
self["break"] = function () {
if (!self.broken) {
self.broken = true;
self.brokenOverlay.alpha = 0.7;
if (self.customerAssigned) {
releaseCustomerFromCabinet(self);
}
}
};
self.repair = function () {
if (self.broken) {
self.broken = false;
self.brokenOverlay.alpha = 0;
tween(self.graphic, {
rotation: Math.PI * 2
}, {
duration: 500,
onFinish: function onFinish() {
self.graphic.rotation = 0;
}
});
LK.getSound('repair').play();
}
};
self.update = function () {
// Random chance of breaking
if (!self.broken && Math.random() < self.breakChance) {
self["break"]();
}
// Generate coins from customers
if (!self.broken && self.customerAssigned) {
self.coinTimer++;
if (self.coinTimer >= self.coinInterval) {
self.coinTimer = 0;
spawnCoin(self.x, self.y, self.earningRate);
}
}
};
self.down = function (x, y, obj) {
if (dragMode === "repair" && self.broken) {
if (money >= self.repairCost) {
money -= self.repairCost;
updateMoneyDisplay();
self.repair();
} else {
// Show not enough money message
showMessage("Not enough money to repair!");
}
}
};
return self;
});
var Button = Container.expand(function (label, callback) {
var self = Container.call(this);
self.callback = callback;
self.graphic = self.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
self.label = new Text2(label, {
size: 40,
fill: 0xFFFFFF
});
self.label.anchor.set(0.5, 0.5);
self.addChild(self.label);
self.setEnabled = function (enabled) {
if (enabled) {
self.graphic.alpha = 1;
} else {
self.graphic.alpha = 0.5;
}
self.enabled = enabled;
};
self.setEnabled(true);
self.down = function (x, y, obj) {
if (self.enabled) {
// Visual feedback
self.graphic.scale.set(0.95, 0.95);
if (self.callback) {
self.callback();
}
}
};
self.up = function (x, y, obj) {
self.graphic.scale.set(1, 1);
};
return self;
});
var Coin = Container.expand(function (value) {
var self = Container.call(this);
self.value = value || 10;
self.collected = false;
self.lifetime = 0;
self.maxLifetime = 300; // 5 seconds
self.graphic = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
if (!self.collected) {
// Coin floats upward for visual effect
self.y -= 0.5;
self.lifetime++;
// Make coin pulse
if (self.lifetime % 30 < 15) {
self.graphic.scale.set(1.1, 1.1);
} else {
self.graphic.scale.set(1, 1);
}
// Make coin disappear after a while
if (self.lifetime >= self.maxLifetime) {
removeCoin(self);
}
}
};
self.collect = function () {
if (!self.collected) {
self.collected = true;
money += self.value;
updateMoneyDisplay();
// Visual effect for collection
tween(self, {
alpha: 0,
y: self.y - 50
}, {
duration: 500,
onFinish: function onFinish() {
removeCoin(self);
}
});
LK.getSound('coin_collect').play();
}
};
self.down = function (x, y, obj) {
self.collect();
};
return self;
});
var Customer = Container.expand(function () {
var self = Container.call(this);
self.graphic = self.attachAsset('customer', {
anchorX: 0.5,
anchorY: 0.5
});
self.happiness = 100;
self.targetCabinet = null;
self.state = "entering"; // entering, playing, leaving
self.playTime = 0;
self.maxPlayTime = 600 + Math.random() * 600; // 10-20 seconds
self.speed = 2 + Math.random();
self.targetX = 0;
self.targetY = 0;
self.update = function () {
if (self.state === "entering") {
if (self.targetCabinet) {
self.targetX = self.targetCabinet.x;
self.targetY = self.targetCabinet.y + 50;
// Move towards target
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > self.speed) {
self.x += dx / dist * self.speed;
self.y += dy / dist * self.speed;
} else {
self.x = self.targetX;
self.y = self.targetY;
self.state = "playing";
}
} else {
self.state = "leaving";
}
} else if (self.state === "playing") {
if (self.targetCabinet && self.targetCabinet.broken) {
// Cabinet broke while playing
self.happiness -= 20;
self.state = "leaving";
releaseCustomerFromCabinet(self.targetCabinet);
self.targetCabinet = null;
LK.getSound('customer_unhappy').play();
} else {
self.playTime++;
if (self.playTime >= self.maxPlayTime) {
self.state = "leaving";
if (self.targetCabinet) {
releaseCustomerFromCabinet(self.targetCabinet);
self.targetCabinet = null;
}
LK.getSound('customer_happy').play();
}
}
} else if (self.state === "leaving") {
// Move towards exit
var exitX = 100;
var exitY = 200;
var dx = exitX - self.x;
var dy = exitY - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > self.speed) {
self.x += dx / dist * self.speed;
self.y += dy / dist * self.speed;
} else {
// Remove customer
removeCustomer(self);
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222222
});
/****
* Game Code
****/
// Constants
var GRID_SIZE = 100;
var ARCADE_WIDTH = 10;
var ARCADE_HEIGHT = 20;
var CABINET_PRICE = [200, 500, 1000];
var MAX_CUSTOMERS = 10;
// Game state
var money = storage.money;
var arcadeLevel = storage.arcadeLevel;
var cabinetsOwned = storage.cabinetsOwned;
var dragMode = "none"; // none, cabinet1, cabinet2, cabinet3, repair
var dragCabinet = null;
var arcadeCabinets = [];
var customers = [];
var coins = [];
var grid = [];
var customerSpawnTimer = 0;
var customerSpawnInterval = 180; // 3 seconds
// Initialize grid
function initializeGrid() {
grid = [];
for (var x = 0; x < ARCADE_WIDTH; x++) {
grid[x] = [];
for (var y = 0; y < ARCADE_HEIGHT; y++) {
// Define walkable area (middle of the arcade)
var isWall = x === 0 || x === ARCADE_WIDTH - 1 || y === 0 || y === ARCADE_HEIGHT - 1;
grid[x][y] = {
type: isWall ? "wall" : "floor",
occupied: isWall
};
// Create visual tile
var tile = LK.getAsset(isWall ? 'wall' : 'tile', {
anchorX: 0.5,
anchorY: 0.5,
x: x * GRID_SIZE + GRID_SIZE / 2,
y: y * GRID_SIZE + GRID_SIZE / 2,
alpha: 0.5
});
game.addChild(tile);
}
}
}
// UI Elements
var moneyText = new Text2("$" + money, {
size: 60,
fill: 0xFFCC00
});
moneyText.anchor.set(0, 0);
LK.gui.topRight.addChild(moneyText);
var messageText = new Text2("", {
size: 40,
fill: 0xFFFFFF
});
messageText.anchor.set(0.5, 0);
LK.gui.top.addChild(messageText);
// Create tools
var toolBox = LK.getAsset('toolbox', {
anchorX: 0.5,
anchorY: 0.5
});
toolBox.x = 1900;
toolBox.y = 400;
game.addChild(toolBox);
// Create buttons
function createButtons() {
// Buy cabinet 1 button
var buyCabinet1Button = new Button("Basic ($" + CABINET_PRICE[0] + ")", function () {
if (money >= CABINET_PRICE[0]) {
dragMode = "cabinet1";
dragCabinet = new ArcadeCabinet(1);
game.addChild(dragCabinet);
} else {
showMessage("Not enough money!");
}
});
buyCabinet1Button.x = 1900;
buyCabinet1Button.y = 500;
game.addChild(buyCabinet1Button);
// Buy cabinet 2 button (unlocked at level 2)
var buyCabinet2Button = new Button("Deluxe ($" + CABINET_PRICE[1] + ")", function () {
if (arcadeLevel >= 2) {
if (money >= CABINET_PRICE[1]) {
dragMode = "cabinet2";
dragCabinet = new ArcadeCabinet(2);
game.addChild(dragCabinet);
} else {
showMessage("Not enough money!");
}
} else {
showMessage("Unlock at Arcade Level 2!");
}
});
buyCabinet2Button.x = 1900;
buyCabinet2Button.y = 600;
buyCabinet2Button.setEnabled(arcadeLevel >= 2);
game.addChild(buyCabinet2Button);
// Buy cabinet 3 button (unlocked at level 3)
var buyCabinet3Button = new Button("Premium ($" + CABINET_PRICE[2] + ")", function () {
if (arcadeLevel >= 3) {
if (money >= CABINET_PRICE[2]) {
dragMode = "cabinet3";
dragCabinet = new ArcadeCabinet(3);
game.addChild(dragCabinet);
} else {
showMessage("Not enough money!");
}
} else {
showMessage("Unlock at Arcade Level 3!");
}
});
buyCabinet3Button.x = 1900;
buyCabinet3Button.y = 700;
buyCabinet3Button.setEnabled(arcadeLevel >= 3);
game.addChild(buyCabinet3Button);
// Repair tool button
var repairButton = new Button("Repair Tool", function () {
dragMode = "repair";
showMessage("Click on broken cabinets to repair");
});
repairButton.x = 1900;
repairButton.y = 800;
game.addChild(repairButton);
// Upgrade arcade button
var upgradeButton = new Button("Upgrade Arcade ($" + arcadeLevel * 1000 + ")", function () {
var upgradeCost = arcadeLevel * 1000;
if (money >= upgradeCost) {
money -= upgradeCost;
arcadeLevel++;
storage.arcadeLevel = arcadeLevel;
updateMoneyDisplay();
showMessage("Arcade upgraded to level " + arcadeLevel + "!");
// Enable new cabinet buttons
if (arcadeLevel === 2) {
buyCabinet2Button.setEnabled(true);
} else if (arcadeLevel === 3) {
buyCabinet3Button.setEnabled(true);
}
// Update upgrade button text
upgradeButton.label.setText("Upgrade Arcade ($" + arcadeLevel * 1000 + ")");
} else {
showMessage("Not enough money to upgrade!");
}
});
upgradeButton.x = 1900;
upgradeButton.y = 900;
game.addChild(upgradeButton);
}
// Setup initial arcade
function setupArcade() {
initializeGrid();
createButtons();
// Place initial cabinet
var initialCabinet = new ArcadeCabinet(1);
initialCabinet.x = 300;
initialCabinet.y = 300;
game.addChild(initialCabinet);
arcadeCabinets.push(initialCabinet);
// Mark grid as occupied
var gridX = Math.floor(initialCabinet.x / GRID_SIZE);
var gridY = Math.floor(initialCabinet.y / GRID_SIZE);
if (gridX >= 0 && gridX < ARCADE_WIDTH && gridY >= 0 && gridY < ARCADE_HEIGHT) {
grid[gridX][gridY].occupied = true;
}
// Start playing background music
LK.playMusic('bgmusic');
}
// Utility functions
function updateMoneyDisplay() {
moneyText.setText("$" + money);
storage.money = money;
}
function showMessage(msg) {
messageText.setText(msg);
messageText.alpha = 1;
// Clear message after 3 seconds
LK.setTimeout(function () {
tween(messageText, {
alpha: 0
}, {
duration: 500
});
}, 3000);
}
function placeArcadeCabinet(cabinet, x, y) {
var gridX = Math.floor(x / GRID_SIZE);
var gridY = Math.floor(y / GRID_SIZE);
// Check if position is valid
if (gridX >= 0 && gridX < ARCADE_WIDTH && gridY >= 0 && gridY < ARCADE_HEIGHT && !grid[gridX][gridY].occupied && grid[gridX][gridY].type === "floor") {
// Snap to grid
cabinet.x = gridX * GRID_SIZE + GRID_SIZE / 2;
cabinet.y = gridY * GRID_SIZE + GRID_SIZE / 2;
// Mark as placed
arcadeCabinets.push(cabinet);
cabinetsOwned++;
storage.cabinetsOwned = cabinetsOwned;
// Mark grid cell as occupied
grid[gridX][gridY].occupied = true;
// Pay for the cabinet
money -= CABINET_PRICE[cabinet.type - 1];
updateMoneyDisplay();
LK.getSound('place_cabinet').play();
return true;
}
return false;
}
function spawnCustomer() {
if (customers.length < MAX_CUSTOMERS) {
var customer = new Customer();
// Start at entrance
customer.x = 100;
customer.y = 200;
// Find available arcade cabinet
var availableCabinets = arcadeCabinets.filter(function (cabinet) {
return !cabinet.broken && !cabinet.customerAssigned;
});
if (availableCabinets.length > 0) {
var randomCabinet = availableCabinets[Math.floor(Math.random() * availableCabinets.length)];
customer.targetCabinet = randomCabinet;
randomCabinet.customerAssigned = true;
}
game.addChild(customer);
customers.push(customer);
}
}
function removeCustomer(customer) {
var index = customers.indexOf(customer);
if (index !== -1) {
customers.splice(index, 1);
customer.destroy();
}
}
function releaseCustomerFromCabinet(cabinet) {
cabinet.customerAssigned = false;
// Find any customer assigned to this cabinet and update them
for (var i = 0; i < customers.length; i++) {
if (customers[i].targetCabinet === cabinet) {
customers[i].targetCabinet = null;
if (customers[i].state === "playing") {
customers[i].state = "leaving";
}
}
}
}
function spawnCoin(x, y, value) {
var coin = new Coin(value);
coin.x = x;
coin.y = y;
game.addChild(coin);
coins.push(coin);
}
function removeCoin(coin) {
var index = coins.indexOf(coin);
if (index !== -1) {
coins.splice(index, 1);
coin.destroy();
}
}
// Event handlers
game.down = function (x, y, obj) {
if (dragMode === "none") {
// Check for toolbox click
if (Math.abs(x - toolBox.x) < 30 && Math.abs(y - toolBox.y) < 30) {
dragMode = "repair";
showMessage("Click on broken cabinets to repair");
}
} else if (dragMode.startsWith("cabinet")) {
if (dragCabinet) {
var success = placeArcadeCabinet(dragCabinet, x, y);
if (success) {
dragCabinet = null;
dragMode = "none";
}
}
} else if (dragMode === "repair") {
// Repair functionality is handled in the ArcadeCabinet class
}
};
game.move = function (x, y, obj) {
if (dragCabinet) {
dragCabinet.x = x;
dragCabinet.y = y;
}
};
game.up = function (x, y, obj) {
// Cancel repair mode on click outside
if (dragMode === "repair") {
dragMode = "none";
}
};
// Game update loop
game.update = function () {
// Spawn customers
customerSpawnTimer++;
if (customerSpawnTimer >= customerSpawnInterval) {
customerSpawnTimer = 0;
spawnCustomer();
}
// Update all game elements
for (var i = 0; i < arcadeCabinets.length; i++) {
// Arcade cabinets are updated automatically by the engine
}
for (var i = 0; i < customers.length; i++) {
// Customers are updated automatically by the engine
}
for (var i = 0; i < coins.length; i++) {
// Coins are updated automatically by the engine
}
// Win condition check - you never "win" a tycoon game, but we can check for major milestones
if (arcadeCabinets.length >= 20 && arcadeLevel >= 3 && !reachedMilestone) {
showMessage("Amazing! Your arcade is thriving!");
reachedMilestone = true;
}
};
// Game initialization
var reachedMilestone = false;
setupArcade();
updateMoneyDisplay();
showMessage("Welcome to MG Arcade Tycoon!"); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,579 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1", {
+ money: 500,
+ arcadeLevel: 1,
+ cabinetsOwned: 1
+});
+
+/****
+* Classes
+****/
+var ArcadeCabinet = Container.expand(function (type) {
+ var self = Container.call(this);
+ self.type = type || 1;
+ self.broken = false;
+ self.customerAssigned = false;
+ self.earningRate = [10, 15, 25][self.type - 1];
+ self.repairCost = [50, 75, 100][self.type - 1];
+ self.breakChance = [0.001, 0.0015, 0.002][self.type - 1];
+ self.coinTimer = 0;
+ self.coinInterval = 300;
+ // Create cabinet graphic based on type
+ var assetId = 'arcadeCabinet';
+ if (self.type === 2) {
+ assetId = 'arcadeCabinet2';
+ }
+ if (self.type === 3) {
+ assetId = 'arcadeCabinet3';
+ }
+ self.graphic = self.attachAsset(assetId, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Create broken overlay (invisible by default)
+ self.brokenOverlay = self.attachAsset('brokenOverlay', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0
+ });
+ self["break"] = function () {
+ if (!self.broken) {
+ self.broken = true;
+ self.brokenOverlay.alpha = 0.7;
+ if (self.customerAssigned) {
+ releaseCustomerFromCabinet(self);
+ }
+ }
+ };
+ self.repair = function () {
+ if (self.broken) {
+ self.broken = false;
+ self.brokenOverlay.alpha = 0;
+ tween(self.graphic, {
+ rotation: Math.PI * 2
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ self.graphic.rotation = 0;
+ }
+ });
+ LK.getSound('repair').play();
+ }
+ };
+ self.update = function () {
+ // Random chance of breaking
+ if (!self.broken && Math.random() < self.breakChance) {
+ self["break"]();
+ }
+ // Generate coins from customers
+ if (!self.broken && self.customerAssigned) {
+ self.coinTimer++;
+ if (self.coinTimer >= self.coinInterval) {
+ self.coinTimer = 0;
+ spawnCoin(self.x, self.y, self.earningRate);
+ }
+ }
+ };
+ self.down = function (x, y, obj) {
+ if (dragMode === "repair" && self.broken) {
+ if (money >= self.repairCost) {
+ money -= self.repairCost;
+ updateMoneyDisplay();
+ self.repair();
+ } else {
+ // Show not enough money message
+ showMessage("Not enough money to repair!");
+ }
+ }
+ };
+ return self;
+});
+var Button = Container.expand(function (label, callback) {
+ var self = Container.call(this);
+ self.callback = callback;
+ self.graphic = self.attachAsset('button', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.label = new Text2(label, {
+ size: 40,
+ fill: 0xFFFFFF
+ });
+ self.label.anchor.set(0.5, 0.5);
+ self.addChild(self.label);
+ self.setEnabled = function (enabled) {
+ if (enabled) {
+ self.graphic.alpha = 1;
+ } else {
+ self.graphic.alpha = 0.5;
+ }
+ self.enabled = enabled;
+ };
+ self.setEnabled(true);
+ self.down = function (x, y, obj) {
+ if (self.enabled) {
+ // Visual feedback
+ self.graphic.scale.set(0.95, 0.95);
+ if (self.callback) {
+ self.callback();
+ }
+ }
+ };
+ self.up = function (x, y, obj) {
+ self.graphic.scale.set(1, 1);
+ };
+ return self;
+});
+var Coin = Container.expand(function (value) {
+ var self = Container.call(this);
+ self.value = value || 10;
+ self.collected = false;
+ self.lifetime = 0;
+ self.maxLifetime = 300; // 5 seconds
+ self.graphic = self.attachAsset('coin', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.update = function () {
+ if (!self.collected) {
+ // Coin floats upward for visual effect
+ self.y -= 0.5;
+ self.lifetime++;
+ // Make coin pulse
+ if (self.lifetime % 30 < 15) {
+ self.graphic.scale.set(1.1, 1.1);
+ } else {
+ self.graphic.scale.set(1, 1);
+ }
+ // Make coin disappear after a while
+ if (self.lifetime >= self.maxLifetime) {
+ removeCoin(self);
+ }
+ }
+ };
+ self.collect = function () {
+ if (!self.collected) {
+ self.collected = true;
+ money += self.value;
+ updateMoneyDisplay();
+ // Visual effect for collection
+ tween(self, {
+ alpha: 0,
+ y: self.y - 50
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ removeCoin(self);
+ }
+ });
+ LK.getSound('coin_collect').play();
+ }
+ };
+ self.down = function (x, y, obj) {
+ self.collect();
+ };
+ return self;
+});
+var Customer = Container.expand(function () {
+ var self = Container.call(this);
+ self.graphic = self.attachAsset('customer', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.happiness = 100;
+ self.targetCabinet = null;
+ self.state = "entering"; // entering, playing, leaving
+ self.playTime = 0;
+ self.maxPlayTime = 600 + Math.random() * 600; // 10-20 seconds
+ self.speed = 2 + Math.random();
+ self.targetX = 0;
+ self.targetY = 0;
+ self.update = function () {
+ if (self.state === "entering") {
+ if (self.targetCabinet) {
+ self.targetX = self.targetCabinet.x;
+ self.targetY = self.targetCabinet.y + 50;
+ // Move towards target
+ var dx = self.targetX - self.x;
+ var dy = self.targetY - self.y;
+ var dist = Math.sqrt(dx * dx + dy * dy);
+ if (dist > self.speed) {
+ self.x += dx / dist * self.speed;
+ self.y += dy / dist * self.speed;
+ } else {
+ self.x = self.targetX;
+ self.y = self.targetY;
+ self.state = "playing";
+ }
+ } else {
+ self.state = "leaving";
+ }
+ } else if (self.state === "playing") {
+ if (self.targetCabinet && self.targetCabinet.broken) {
+ // Cabinet broke while playing
+ self.happiness -= 20;
+ self.state = "leaving";
+ releaseCustomerFromCabinet(self.targetCabinet);
+ self.targetCabinet = null;
+ LK.getSound('customer_unhappy').play();
+ } else {
+ self.playTime++;
+ if (self.playTime >= self.maxPlayTime) {
+ self.state = "leaving";
+ if (self.targetCabinet) {
+ releaseCustomerFromCabinet(self.targetCabinet);
+ self.targetCabinet = null;
+ }
+ LK.getSound('customer_happy').play();
+ }
+ }
+ } else if (self.state === "leaving") {
+ // Move towards exit
+ var exitX = 100;
+ var exitY = 200;
+ var dx = exitX - self.x;
+ var dy = exitY - self.y;
+ var dist = Math.sqrt(dx * dx + dy * dy);
+ if (dist > self.speed) {
+ self.x += dx / dist * self.speed;
+ self.y += dy / dist * self.speed;
+ } else {
+ // Remove customer
+ removeCustomer(self);
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x222222
+});
+
+/****
+* Game Code
+****/
+// Constants
+var GRID_SIZE = 100;
+var ARCADE_WIDTH = 10;
+var ARCADE_HEIGHT = 20;
+var CABINET_PRICE = [200, 500, 1000];
+var MAX_CUSTOMERS = 10;
+// Game state
+var money = storage.money;
+var arcadeLevel = storage.arcadeLevel;
+var cabinetsOwned = storage.cabinetsOwned;
+var dragMode = "none"; // none, cabinet1, cabinet2, cabinet3, repair
+var dragCabinet = null;
+var arcadeCabinets = [];
+var customers = [];
+var coins = [];
+var grid = [];
+var customerSpawnTimer = 0;
+var customerSpawnInterval = 180; // 3 seconds
+// Initialize grid
+function initializeGrid() {
+ grid = [];
+ for (var x = 0; x < ARCADE_WIDTH; x++) {
+ grid[x] = [];
+ for (var y = 0; y < ARCADE_HEIGHT; y++) {
+ // Define walkable area (middle of the arcade)
+ var isWall = x === 0 || x === ARCADE_WIDTH - 1 || y === 0 || y === ARCADE_HEIGHT - 1;
+ grid[x][y] = {
+ type: isWall ? "wall" : "floor",
+ occupied: isWall
+ };
+ // Create visual tile
+ var tile = LK.getAsset(isWall ? 'wall' : 'tile', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: x * GRID_SIZE + GRID_SIZE / 2,
+ y: y * GRID_SIZE + GRID_SIZE / 2,
+ alpha: 0.5
+ });
+ game.addChild(tile);
+ }
+ }
+}
+// UI Elements
+var moneyText = new Text2("$" + money, {
+ size: 60,
+ fill: 0xFFCC00
+});
+moneyText.anchor.set(0, 0);
+LK.gui.topRight.addChild(moneyText);
+var messageText = new Text2("", {
+ size: 40,
+ fill: 0xFFFFFF
+});
+messageText.anchor.set(0.5, 0);
+LK.gui.top.addChild(messageText);
+// Create tools
+var toolBox = LK.getAsset('toolbox', {
+ anchorX: 0.5,
+ anchorY: 0.5
+});
+toolBox.x = 1900;
+toolBox.y = 400;
+game.addChild(toolBox);
+// Create buttons
+function createButtons() {
+ // Buy cabinet 1 button
+ var buyCabinet1Button = new Button("Basic ($" + CABINET_PRICE[0] + ")", function () {
+ if (money >= CABINET_PRICE[0]) {
+ dragMode = "cabinet1";
+ dragCabinet = new ArcadeCabinet(1);
+ game.addChild(dragCabinet);
+ } else {
+ showMessage("Not enough money!");
+ }
+ });
+ buyCabinet1Button.x = 1900;
+ buyCabinet1Button.y = 500;
+ game.addChild(buyCabinet1Button);
+ // Buy cabinet 2 button (unlocked at level 2)
+ var buyCabinet2Button = new Button("Deluxe ($" + CABINET_PRICE[1] + ")", function () {
+ if (arcadeLevel >= 2) {
+ if (money >= CABINET_PRICE[1]) {
+ dragMode = "cabinet2";
+ dragCabinet = new ArcadeCabinet(2);
+ game.addChild(dragCabinet);
+ } else {
+ showMessage("Not enough money!");
+ }
+ } else {
+ showMessage("Unlock at Arcade Level 2!");
+ }
+ });
+ buyCabinet2Button.x = 1900;
+ buyCabinet2Button.y = 600;
+ buyCabinet2Button.setEnabled(arcadeLevel >= 2);
+ game.addChild(buyCabinet2Button);
+ // Buy cabinet 3 button (unlocked at level 3)
+ var buyCabinet3Button = new Button("Premium ($" + CABINET_PRICE[2] + ")", function () {
+ if (arcadeLevel >= 3) {
+ if (money >= CABINET_PRICE[2]) {
+ dragMode = "cabinet3";
+ dragCabinet = new ArcadeCabinet(3);
+ game.addChild(dragCabinet);
+ } else {
+ showMessage("Not enough money!");
+ }
+ } else {
+ showMessage("Unlock at Arcade Level 3!");
+ }
+ });
+ buyCabinet3Button.x = 1900;
+ buyCabinet3Button.y = 700;
+ buyCabinet3Button.setEnabled(arcadeLevel >= 3);
+ game.addChild(buyCabinet3Button);
+ // Repair tool button
+ var repairButton = new Button("Repair Tool", function () {
+ dragMode = "repair";
+ showMessage("Click on broken cabinets to repair");
+ });
+ repairButton.x = 1900;
+ repairButton.y = 800;
+ game.addChild(repairButton);
+ // Upgrade arcade button
+ var upgradeButton = new Button("Upgrade Arcade ($" + arcadeLevel * 1000 + ")", function () {
+ var upgradeCost = arcadeLevel * 1000;
+ if (money >= upgradeCost) {
+ money -= upgradeCost;
+ arcadeLevel++;
+ storage.arcadeLevel = arcadeLevel;
+ updateMoneyDisplay();
+ showMessage("Arcade upgraded to level " + arcadeLevel + "!");
+ // Enable new cabinet buttons
+ if (arcadeLevel === 2) {
+ buyCabinet2Button.setEnabled(true);
+ } else if (arcadeLevel === 3) {
+ buyCabinet3Button.setEnabled(true);
+ }
+ // Update upgrade button text
+ upgradeButton.label.setText("Upgrade Arcade ($" + arcadeLevel * 1000 + ")");
+ } else {
+ showMessage("Not enough money to upgrade!");
+ }
+ });
+ upgradeButton.x = 1900;
+ upgradeButton.y = 900;
+ game.addChild(upgradeButton);
+}
+// Setup initial arcade
+function setupArcade() {
+ initializeGrid();
+ createButtons();
+ // Place initial cabinet
+ var initialCabinet = new ArcadeCabinet(1);
+ initialCabinet.x = 300;
+ initialCabinet.y = 300;
+ game.addChild(initialCabinet);
+ arcadeCabinets.push(initialCabinet);
+ // Mark grid as occupied
+ var gridX = Math.floor(initialCabinet.x / GRID_SIZE);
+ var gridY = Math.floor(initialCabinet.y / GRID_SIZE);
+ if (gridX >= 0 && gridX < ARCADE_WIDTH && gridY >= 0 && gridY < ARCADE_HEIGHT) {
+ grid[gridX][gridY].occupied = true;
+ }
+ // Start playing background music
+ LK.playMusic('bgmusic');
+}
+// Utility functions
+function updateMoneyDisplay() {
+ moneyText.setText("$" + money);
+ storage.money = money;
+}
+function showMessage(msg) {
+ messageText.setText(msg);
+ messageText.alpha = 1;
+ // Clear message after 3 seconds
+ LK.setTimeout(function () {
+ tween(messageText, {
+ alpha: 0
+ }, {
+ duration: 500
+ });
+ }, 3000);
+}
+function placeArcadeCabinet(cabinet, x, y) {
+ var gridX = Math.floor(x / GRID_SIZE);
+ var gridY = Math.floor(y / GRID_SIZE);
+ // Check if position is valid
+ if (gridX >= 0 && gridX < ARCADE_WIDTH && gridY >= 0 && gridY < ARCADE_HEIGHT && !grid[gridX][gridY].occupied && grid[gridX][gridY].type === "floor") {
+ // Snap to grid
+ cabinet.x = gridX * GRID_SIZE + GRID_SIZE / 2;
+ cabinet.y = gridY * GRID_SIZE + GRID_SIZE / 2;
+ // Mark as placed
+ arcadeCabinets.push(cabinet);
+ cabinetsOwned++;
+ storage.cabinetsOwned = cabinetsOwned;
+ // Mark grid cell as occupied
+ grid[gridX][gridY].occupied = true;
+ // Pay for the cabinet
+ money -= CABINET_PRICE[cabinet.type - 1];
+ updateMoneyDisplay();
+ LK.getSound('place_cabinet').play();
+ return true;
+ }
+ return false;
+}
+function spawnCustomer() {
+ if (customers.length < MAX_CUSTOMERS) {
+ var customer = new Customer();
+ // Start at entrance
+ customer.x = 100;
+ customer.y = 200;
+ // Find available arcade cabinet
+ var availableCabinets = arcadeCabinets.filter(function (cabinet) {
+ return !cabinet.broken && !cabinet.customerAssigned;
+ });
+ if (availableCabinets.length > 0) {
+ var randomCabinet = availableCabinets[Math.floor(Math.random() * availableCabinets.length)];
+ customer.targetCabinet = randomCabinet;
+ randomCabinet.customerAssigned = true;
+ }
+ game.addChild(customer);
+ customers.push(customer);
+ }
+}
+function removeCustomer(customer) {
+ var index = customers.indexOf(customer);
+ if (index !== -1) {
+ customers.splice(index, 1);
+ customer.destroy();
+ }
+}
+function releaseCustomerFromCabinet(cabinet) {
+ cabinet.customerAssigned = false;
+ // Find any customer assigned to this cabinet and update them
+ for (var i = 0; i < customers.length; i++) {
+ if (customers[i].targetCabinet === cabinet) {
+ customers[i].targetCabinet = null;
+ if (customers[i].state === "playing") {
+ customers[i].state = "leaving";
+ }
+ }
+ }
+}
+function spawnCoin(x, y, value) {
+ var coin = new Coin(value);
+ coin.x = x;
+ coin.y = y;
+ game.addChild(coin);
+ coins.push(coin);
+}
+function removeCoin(coin) {
+ var index = coins.indexOf(coin);
+ if (index !== -1) {
+ coins.splice(index, 1);
+ coin.destroy();
+ }
+}
+// Event handlers
+game.down = function (x, y, obj) {
+ if (dragMode === "none") {
+ // Check for toolbox click
+ if (Math.abs(x - toolBox.x) < 30 && Math.abs(y - toolBox.y) < 30) {
+ dragMode = "repair";
+ showMessage("Click on broken cabinets to repair");
+ }
+ } else if (dragMode.startsWith("cabinet")) {
+ if (dragCabinet) {
+ var success = placeArcadeCabinet(dragCabinet, x, y);
+ if (success) {
+ dragCabinet = null;
+ dragMode = "none";
+ }
+ }
+ } else if (dragMode === "repair") {
+ // Repair functionality is handled in the ArcadeCabinet class
+ }
+};
+game.move = function (x, y, obj) {
+ if (dragCabinet) {
+ dragCabinet.x = x;
+ dragCabinet.y = y;
+ }
+};
+game.up = function (x, y, obj) {
+ // Cancel repair mode on click outside
+ if (dragMode === "repair") {
+ dragMode = "none";
+ }
+};
+// Game update loop
+game.update = function () {
+ // Spawn customers
+ customerSpawnTimer++;
+ if (customerSpawnTimer >= customerSpawnInterval) {
+ customerSpawnTimer = 0;
+ spawnCustomer();
+ }
+ // Update all game elements
+ for (var i = 0; i < arcadeCabinets.length; i++) {
+ // Arcade cabinets are updated automatically by the engine
+ }
+ for (var i = 0; i < customers.length; i++) {
+ // Customers are updated automatically by the engine
+ }
+ for (var i = 0; i < coins.length; i++) {
+ // Coins are updated automatically by the engine
+ }
+ // Win condition check - you never "win" a tycoon game, but we can check for major milestones
+ if (arcadeCabinets.length >= 20 && arcadeLevel >= 3 && !reachedMilestone) {
+ showMessage("Amazing! Your arcade is thriving!");
+ reachedMilestone = true;
+ }
+};
+// Game initialization
+var reachedMilestone = false;
+setupArcade();
+updateMoneyDisplay();
+showMessage("Welcome to MG Arcade Tycoon!");
\ No newline at end of file
client MG boy. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
tile red and blu. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
wall red and blu. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
arcadecabinet MG. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows