/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var GameButton = Container.expand(function (text, callback) {
var self = Container.call(this);
self.callback = callback;
self.isEnabled = true;
self.bg = self.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
self.text = new Text2(text, {
size: 32,
fill: 0xFFFFFF
});
self.text.anchor.set(0.5, 0.5);
self.addChild(self.text);
self.setEnabled = function (enabled) {
self.isEnabled = enabled;
self.alpha = enabled ? 1.0 : 0.5;
};
self.down = function (x, y, obj) {
if (self.isEnabled && self.callback) {
self.callback();
}
};
return self;
});
var Player = Container.expand(function (playerNumber, color) {
var self = Container.call(this);
self.playerNumber = playerNumber;
self.maxHealth = 3;
self.health = self.maxHealth;
self.items = [];
self.isAlive = true;
var playerGraphics = self.attachAsset(playerNumber === 1 ? 'player1' : 'player2', {
anchorX: 0.5,
anchorY: 0.5
});
var healthBarBg = self.attachAsset('healthBar', {
anchorX: 0.5,
anchorY: 0.5,
y: -150,
tint: 0x660000
});
self.healthBar = self.attachAsset('healthBar', {
anchorX: 0.5,
anchorY: 0.5,
y: -150
});
self.nameText = new Text2('Player ' + playerNumber, {
size: 40,
fill: 0xFFFFFF
});
self.nameText.anchor.set(0.5, 0.5);
self.nameText.y = -200;
self.addChild(self.nameText);
self.healthText = new Text2(self.health + '/' + self.maxHealth, {
size: 30,
fill: 0xFFFFFF
});
self.healthText.anchor.set(0.5, 0.5);
self.healthText.y = -120;
self.addChild(self.healthText);
self.updateHealth = function () {
var healthPercent = self.health / self.maxHealth;
self.healthBar.scaleX = healthPercent;
self.healthText.setText(self.health + '/' + self.maxHealth);
if (self.health <= 0) {
self.isAlive = false;
self.alpha = 0.5;
}
};
self.takeDamage = function () {
self.health = Math.max(0, self.health - 1);
self.updateHealth();
// Flash red
tween(self, {
tint: 0xFF0000
}, {
duration: 200,
onFinish: function onFinish() {
tween(self, {
tint: 0xFFFFFF
}, {
duration: 200
});
}
});
};
self.heal = function () {
self.health = Math.min(self.maxHealth, self.health + 1);
self.updateHealth();
// Flash green
tween(self, {
tint: 0x00FF00
}, {
duration: 200,
onFinish: function onFinish() {
tween(self, {
tint: 0xFFFFFF
}, {
duration: 200
});
}
});
};
return self;
});
var Revolver = Container.expand(function () {
var self = Container.call(this);
self.chambers = [];
self.currentChamber = 0;
self.totalChambers = 6;
self.isRevealed = false;
var revolverGraphics = self.attachAsset('revolver', {
anchorX: 0.5,
anchorY: 0.5
});
self.chamberIndicators = [];
for (var i = 0; i < self.totalChambers; i++) {
var indicator = self.attachAsset('blank', {
anchorX: 0.5,
anchorY: 0.5,
x: (i - 2.5) * 50,
y: -120
});
self.chamberIndicators.push(indicator);
}
self.loadChambers = function (liveRounds, blanks) {
self.chambers = [];
self.currentChamber = 0;
// Add live rounds
for (var i = 0; i < liveRounds; i++) {
self.chambers.push(true);
}
// Add blanks
for (var i = 0; i < blanks; i++) {
self.chambers.push(false);
}
// Shuffle chambers
for (var i = self.chambers.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = self.chambers[i];
self.chambers[i] = self.chambers[j];
self.chambers[j] = temp;
}
self.updateDisplay();
};
self.updateDisplay = function () {
for (var i = 0; i < self.totalChambers; i++) {
if (i < self.chambers.length) {
if (self.isRevealed || i < self.currentChamber) {
if (i < self.chambers.length && self.chambers[i]) {
self.chamberIndicators[i].tint = 0xFFD700; // Gold for live
} else {
self.chamberIndicators[i].tint = 0x888888; // Gray for blank
}
} else {
self.chamberIndicators[i].tint = 0x444444; // Dark for unknown
}
if (i === self.currentChamber) {
self.chamberIndicators[i].scaleX = 1.5;
self.chamberIndicators[i].scaleY = 1.5;
} else {
self.chamberIndicators[i].scaleX = 1;
self.chamberIndicators[i].scaleY = 1;
}
} else {
self.chamberIndicators[i].tint = 0x222222; // Very dark for empty
self.chamberIndicators[i].scaleX = 1;
self.chamberIndicators[i].scaleY = 1;
}
}
};
self.fire = function () {
if (self.currentChamber >= self.chambers.length) {
return null; // Empty chamber
}
var isLive = self.chambers[self.currentChamber];
self.currentChamber++;
self.updateDisplay();
// Animate rotation
tween(revolverGraphics, {
rotation: revolverGraphics.rotation + Math.PI / 3
}, {
duration: 300,
easing: tween.easeOut
});
return isLive;
};
self.peekNext = function () {
if (self.currentChamber >= self.chambers.length) {
return null;
}
return self.chambers[self.currentChamber];
};
self.getRemainingRounds = function () {
var live = 0;
var blank = 0;
for (var i = self.currentChamber; i < self.chambers.length; i++) {
if (self.chambers[i]) {
live++;
} else {
blank++;
}
}
return {
live: live,
blank: blank
};
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
// Game state
var currentPlayer = 1;
var gamePhase = 'setup'; // setup, playing, gameover
var round = 1;
var player1, player2, revolver;
var buttons = [];
var infoText, roundText, turnText;
// Available items
var availableItems = ['magnifying_glass', 'handcuffs', 'cigarettes'];
var itemDescriptions = {
'magnifying_glass': 'Peek at next bullet',
'handcuffs': 'Skip opponent turn',
'cigarettes': 'Restore 1 health'
};
// Initialize players
player1 = game.addChild(new Player(1));
player1.x = 512;
player1.y = 1800;
player2 = game.addChild(new Player(2));
player2.x = 1536;
player2.y = 1800;
// Initialize revolver
revolver = game.addChild(new Revolver());
revolver.x = 1024;
revolver.y = 1000;
// UI Text
roundText = new Text2('Round 1', {
size: 60,
fill: 0xFFFFFF
});
roundText.anchor.set(0.5, 0);
LK.gui.top.addChild(roundText);
roundText.y = 100;
turnText = new Text2('Player 1 Turn', {
size: 40,
fill: 0x00AAFF
});
turnText.anchor.set(0.5, 0.5);
game.addChild(turnText);
turnText.x = 1024;
turnText.y = 600;
infoText = new Text2('Choose your action', {
size: 36,
fill: 0xFFFFFF
});
infoText.anchor.set(0.5, 0.5);
game.addChild(infoText);
infoText.x = 1024;
infoText.y = 700;
// Action buttons
var shootOpponentButton = game.addChild(new GameButton('Shoot Opponent', function () {
shootOpponent();
}));
shootOpponentButton.x = 724;
shootOpponentButton.y = 1300;
var shootSelfButton = game.addChild(new GameButton('Shoot Self', function () {
shootSelf();
}));
shootSelfButton.x = 1324;
shootSelfButton.y = 1300;
buttons.push(shootOpponentButton, shootSelfButton);
// Item buttons (will be created dynamically)
var itemButtons = [];
function setupRound() {
gamePhase = 'setup';
// Calculate rounds for this round
var liveRounds = Math.min(2 + Math.floor(round / 2), 4);
var blanks = Math.max(4 - Math.floor(round / 3), 2);
// Load revolver
revolver.loadChambers(liveRounds, blanks);
// Give items to players
giveRandomItems();
// Update display
var remaining = revolver.getRemainingRounds();
infoText.setText('Round ' + round + ': ' + remaining.live + ' live, ' + remaining.blank + ' blank');
roundText.setText('Round ' + round);
gamePhase = 'playing';
updateTurn();
}
function giveRandomItems() {
// Clear existing item buttons
for (var i = 0; i < itemButtons.length; i++) {
itemButtons[i].destroy();
}
itemButtons = [];
// Give 1-2 random items to each player
player1.items = [];
player2.items = [];
for (var p = 1; p <= 2; p++) {
var player = p === 1 ? player1 : player2;
var numItems = 1 + Math.floor(Math.random() * 2);
for (var i = 0; i < numItems; i++) {
var randomItem = availableItems[Math.floor(Math.random() * availableItems.length)];
player.items.push(randomItem);
}
// Create item buttons for current player
if (p === currentPlayer) {
createItemButtons(player);
}
}
}
function createItemButtons(player) {
// Clear existing item buttons
for (var i = 0; i < itemButtons.length; i++) {
itemButtons[i].destroy();
}
itemButtons = [];
for (var i = 0; i < player.items.length; i++) {
var itemName = player.items[i];
var button = game.addChild(new GameButton(itemName.replace('_', ' '), createItemCallback(i)));
button.x = 500 + i * 200;
button.y = 1500;
button.scaleX = 0.8;
button.scaleY = 0.8;
itemButtons.push(button);
}
}
function createItemCallback(itemIndex) {
return function () {
useItem(itemIndex);
};
}
function useItem(itemIndex) {
var player = currentPlayer === 1 ? player1 : player2;
var itemName = player.items[itemIndex];
switch (itemName) {
case 'magnifying_glass':
var nextBullet = revolver.peekNext();
if (nextBullet === null) {
infoText.setText('Chamber is empty');
} else {
infoText.setText('Next bullet is: ' + (nextBullet ? 'LIVE' : 'BLANK'));
}
break;
case 'handcuffs':
infoText.setText('Opponent will skip their next turn');
// This will be handled in switchTurn
break;
case 'cigarettes':
player.heal();
infoText.setText('Health restored');
break;
}
// Remove used item
player.items.splice(itemIndex, 1);
createItemButtons(player);
LK.getSound('click').play();
// Don't end turn when using items
}
function shootOpponent() {
if (gamePhase !== 'playing') return;
var result = revolver.fire();
var opponent = currentPlayer === 1 ? player2 : player1;
if (result === true) {
// Live round - opponent takes damage
LK.getSound('gunshot').play();
opponent.takeDamage();
infoText.setText('BANG! Opponent hit!');
if (!opponent.isAlive) {
endGame(currentPlayer);
return;
}
} else if (result === false) {
// Blank round
LK.getSound('click').play();
infoText.setText('*Click* - Blank round');
} else {
// Empty chamber
LK.getSound('click').play();
infoText.setText('*Click* - Empty chamber');
}
// End turn
LK.setTimeout(function () {
switchTurn();
}, 1500);
}
function shootSelf() {
if (gamePhase !== 'playing') return;
var result = revolver.fire();
var currentPlayerObj = currentPlayer === 1 ? player1 : player2;
if (result === true) {
// Live round - current player takes damage
LK.getSound('gunshot').play();
currentPlayerObj.takeDamage();
infoText.setText('BANG! You hit yourself!');
if (!currentPlayerObj.isAlive) {
endGame(currentPlayer === 1 ? 2 : 1);
return;
}
// End turn
LK.setTimeout(function () {
switchTurn();
}, 1500);
} else if (result === false) {
// Blank round - continue turn
LK.getSound('click').play();
infoText.setText('*Click* - Blank! Continue your turn');
// Don't switch turns
} else {
// Empty chamber
LK.getSound('click').play();
infoText.setText('*Click* - Empty chamber');
// End turn
LK.setTimeout(function () {
switchTurn();
}, 1500);
}
}
function switchTurn() {
// Check if revolver is empty
var remaining = revolver.getRemainingRounds();
if (remaining.live === 0 && remaining.blank === 0) {
// Start new round
round++;
setupRound();
return;
}
// Check for handcuffs effect
var currentPlayerObj = currentPlayer === 1 ? player1 : player2;
var hasHandcuffs = false;
for (var i = 0; i < currentPlayerObj.items.length; i++) {
if (currentPlayerObj.items[i] === 'handcuffs') {
hasHandcuffs = true;
currentPlayerObj.items.splice(i, 1);
break;
}
}
if (hasHandcuffs) {
infoText.setText('Handcuffs used - opponent skips turn');
// Don't switch player
createItemButtons(currentPlayerObj);
updateTurn();
return;
}
// Normal turn switch
currentPlayer = currentPlayer === 1 ? 2 : 1;
updateTurn();
}
function updateTurn() {
var currentPlayerObj = currentPlayer === 1 ? player1 : player2;
turnText.setText('Player ' + currentPlayer + ' Turn');
turnText.tint = currentPlayer === 1 ? 0x00aaff : 0xff00aa;
// Update item buttons
createItemButtons(currentPlayerObj);
// Show remaining rounds
var remaining = revolver.getRemainingRounds();
if (remaining.live === 0 && remaining.blank === 0) {
infoText.setText('Revolver empty - New round starting...');
LK.setTimeout(function () {
round++;
setupRound();
}, 2000);
} else {
infoText.setText(remaining.live + ' live, ' + remaining.blank + ' blank remaining');
}
}
function endGame(winner) {
gamePhase = 'gameover';
// Disable all buttons
for (var i = 0; i < buttons.length; i++) {
buttons[i].setEnabled(false);
}
for (var i = 0; i < itemButtons.length; i++) {
itemButtons[i].setEnabled(false);
}
infoText.setText('Player ' + winner + ' Wins!');
turnText.setText('Game Over');
LK.setScore(winner);
LK.setTimeout(function () {
LK.showYouWin();
}, 2000);
}
// Start the game
setupRound(); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,504 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var GameButton = Container.expand(function (text, callback) {
+ var self = Container.call(this);
+ self.callback = callback;
+ self.isEnabled = true;
+ self.bg = self.attachAsset('button', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.text = new Text2(text, {
+ size: 32,
+ fill: 0xFFFFFF
+ });
+ self.text.anchor.set(0.5, 0.5);
+ self.addChild(self.text);
+ self.setEnabled = function (enabled) {
+ self.isEnabled = enabled;
+ self.alpha = enabled ? 1.0 : 0.5;
+ };
+ self.down = function (x, y, obj) {
+ if (self.isEnabled && self.callback) {
+ self.callback();
+ }
+ };
+ return self;
+});
+var Player = Container.expand(function (playerNumber, color) {
+ var self = Container.call(this);
+ self.playerNumber = playerNumber;
+ self.maxHealth = 3;
+ self.health = self.maxHealth;
+ self.items = [];
+ self.isAlive = true;
+ var playerGraphics = self.attachAsset(playerNumber === 1 ? 'player1' : 'player2', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var healthBarBg = self.attachAsset('healthBar', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ y: -150,
+ tint: 0x660000
+ });
+ self.healthBar = self.attachAsset('healthBar', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ y: -150
+ });
+ self.nameText = new Text2('Player ' + playerNumber, {
+ size: 40,
+ fill: 0xFFFFFF
+ });
+ self.nameText.anchor.set(0.5, 0.5);
+ self.nameText.y = -200;
+ self.addChild(self.nameText);
+ self.healthText = new Text2(self.health + '/' + self.maxHealth, {
+ size: 30,
+ fill: 0xFFFFFF
+ });
+ self.healthText.anchor.set(0.5, 0.5);
+ self.healthText.y = -120;
+ self.addChild(self.healthText);
+ self.updateHealth = function () {
+ var healthPercent = self.health / self.maxHealth;
+ self.healthBar.scaleX = healthPercent;
+ self.healthText.setText(self.health + '/' + self.maxHealth);
+ if (self.health <= 0) {
+ self.isAlive = false;
+ self.alpha = 0.5;
+ }
+ };
+ self.takeDamage = function () {
+ self.health = Math.max(0, self.health - 1);
+ self.updateHealth();
+ // Flash red
+ tween(self, {
+ tint: 0xFF0000
+ }, {
+ duration: 200,
+ onFinish: function onFinish() {
+ tween(self, {
+ tint: 0xFFFFFF
+ }, {
+ duration: 200
+ });
+ }
+ });
+ };
+ self.heal = function () {
+ self.health = Math.min(self.maxHealth, self.health + 1);
+ self.updateHealth();
+ // Flash green
+ tween(self, {
+ tint: 0x00FF00
+ }, {
+ duration: 200,
+ onFinish: function onFinish() {
+ tween(self, {
+ tint: 0xFFFFFF
+ }, {
+ duration: 200
+ });
+ }
+ });
+ };
+ return self;
+});
+var Revolver = Container.expand(function () {
+ var self = Container.call(this);
+ self.chambers = [];
+ self.currentChamber = 0;
+ self.totalChambers = 6;
+ self.isRevealed = false;
+ var revolverGraphics = self.attachAsset('revolver', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.chamberIndicators = [];
+ for (var i = 0; i < self.totalChambers; i++) {
+ var indicator = self.attachAsset('blank', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: (i - 2.5) * 50,
+ y: -120
+ });
+ self.chamberIndicators.push(indicator);
+ }
+ self.loadChambers = function (liveRounds, blanks) {
+ self.chambers = [];
+ self.currentChamber = 0;
+ // Add live rounds
+ for (var i = 0; i < liveRounds; i++) {
+ self.chambers.push(true);
+ }
+ // Add blanks
+ for (var i = 0; i < blanks; i++) {
+ self.chambers.push(false);
+ }
+ // Shuffle chambers
+ for (var i = self.chambers.length - 1; i > 0; i--) {
+ var j = Math.floor(Math.random() * (i + 1));
+ var temp = self.chambers[i];
+ self.chambers[i] = self.chambers[j];
+ self.chambers[j] = temp;
+ }
+ self.updateDisplay();
+ };
+ self.updateDisplay = function () {
+ for (var i = 0; i < self.totalChambers; i++) {
+ if (i < self.chambers.length) {
+ if (self.isRevealed || i < self.currentChamber) {
+ if (i < self.chambers.length && self.chambers[i]) {
+ self.chamberIndicators[i].tint = 0xFFD700; // Gold for live
+ } else {
+ self.chamberIndicators[i].tint = 0x888888; // Gray for blank
+ }
+ } else {
+ self.chamberIndicators[i].tint = 0x444444; // Dark for unknown
+ }
+ if (i === self.currentChamber) {
+ self.chamberIndicators[i].scaleX = 1.5;
+ self.chamberIndicators[i].scaleY = 1.5;
+ } else {
+ self.chamberIndicators[i].scaleX = 1;
+ self.chamberIndicators[i].scaleY = 1;
+ }
+ } else {
+ self.chamberIndicators[i].tint = 0x222222; // Very dark for empty
+ self.chamberIndicators[i].scaleX = 1;
+ self.chamberIndicators[i].scaleY = 1;
+ }
+ }
+ };
+ self.fire = function () {
+ if (self.currentChamber >= self.chambers.length) {
+ return null; // Empty chamber
+ }
+ var isLive = self.chambers[self.currentChamber];
+ self.currentChamber++;
+ self.updateDisplay();
+ // Animate rotation
+ tween(revolverGraphics, {
+ rotation: revolverGraphics.rotation + Math.PI / 3
+ }, {
+ duration: 300,
+ easing: tween.easeOut
+ });
+ return isLive;
+ };
+ self.peekNext = function () {
+ if (self.currentChamber >= self.chambers.length) {
+ return null;
+ }
+ return self.chambers[self.currentChamber];
+ };
+ self.getRemainingRounds = function () {
+ var live = 0;
+ var blank = 0;
+ for (var i = self.currentChamber; i < self.chambers.length; i++) {
+ if (self.chambers[i]) {
+ live++;
+ } else {
+ blank++;
+ }
+ }
+ return {
+ live: live,
+ blank: blank
+ };
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a1a
+});
+
+/****
+* Game Code
+****/
+// Game state
+var currentPlayer = 1;
+var gamePhase = 'setup'; // setup, playing, gameover
+var round = 1;
+var player1, player2, revolver;
+var buttons = [];
+var infoText, roundText, turnText;
+// Available items
+var availableItems = ['magnifying_glass', 'handcuffs', 'cigarettes'];
+var itemDescriptions = {
+ 'magnifying_glass': 'Peek at next bullet',
+ 'handcuffs': 'Skip opponent turn',
+ 'cigarettes': 'Restore 1 health'
+};
+// Initialize players
+player1 = game.addChild(new Player(1));
+player1.x = 512;
+player1.y = 1800;
+player2 = game.addChild(new Player(2));
+player2.x = 1536;
+player2.y = 1800;
+// Initialize revolver
+revolver = game.addChild(new Revolver());
+revolver.x = 1024;
+revolver.y = 1000;
+// UI Text
+roundText = new Text2('Round 1', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+roundText.anchor.set(0.5, 0);
+LK.gui.top.addChild(roundText);
+roundText.y = 100;
+turnText = new Text2('Player 1 Turn', {
+ size: 40,
+ fill: 0x00AAFF
+});
+turnText.anchor.set(0.5, 0.5);
+game.addChild(turnText);
+turnText.x = 1024;
+turnText.y = 600;
+infoText = new Text2('Choose your action', {
+ size: 36,
+ fill: 0xFFFFFF
+});
+infoText.anchor.set(0.5, 0.5);
+game.addChild(infoText);
+infoText.x = 1024;
+infoText.y = 700;
+// Action buttons
+var shootOpponentButton = game.addChild(new GameButton('Shoot Opponent', function () {
+ shootOpponent();
+}));
+shootOpponentButton.x = 724;
+shootOpponentButton.y = 1300;
+var shootSelfButton = game.addChild(new GameButton('Shoot Self', function () {
+ shootSelf();
+}));
+shootSelfButton.x = 1324;
+shootSelfButton.y = 1300;
+buttons.push(shootOpponentButton, shootSelfButton);
+// Item buttons (will be created dynamically)
+var itemButtons = [];
+function setupRound() {
+ gamePhase = 'setup';
+ // Calculate rounds for this round
+ var liveRounds = Math.min(2 + Math.floor(round / 2), 4);
+ var blanks = Math.max(4 - Math.floor(round / 3), 2);
+ // Load revolver
+ revolver.loadChambers(liveRounds, blanks);
+ // Give items to players
+ giveRandomItems();
+ // Update display
+ var remaining = revolver.getRemainingRounds();
+ infoText.setText('Round ' + round + ': ' + remaining.live + ' live, ' + remaining.blank + ' blank');
+ roundText.setText('Round ' + round);
+ gamePhase = 'playing';
+ updateTurn();
+}
+function giveRandomItems() {
+ // Clear existing item buttons
+ for (var i = 0; i < itemButtons.length; i++) {
+ itemButtons[i].destroy();
+ }
+ itemButtons = [];
+ // Give 1-2 random items to each player
+ player1.items = [];
+ player2.items = [];
+ for (var p = 1; p <= 2; p++) {
+ var player = p === 1 ? player1 : player2;
+ var numItems = 1 + Math.floor(Math.random() * 2);
+ for (var i = 0; i < numItems; i++) {
+ var randomItem = availableItems[Math.floor(Math.random() * availableItems.length)];
+ player.items.push(randomItem);
+ }
+ // Create item buttons for current player
+ if (p === currentPlayer) {
+ createItemButtons(player);
+ }
+ }
+}
+function createItemButtons(player) {
+ // Clear existing item buttons
+ for (var i = 0; i < itemButtons.length; i++) {
+ itemButtons[i].destroy();
+ }
+ itemButtons = [];
+ for (var i = 0; i < player.items.length; i++) {
+ var itemName = player.items[i];
+ var button = game.addChild(new GameButton(itemName.replace('_', ' '), createItemCallback(i)));
+ button.x = 500 + i * 200;
+ button.y = 1500;
+ button.scaleX = 0.8;
+ button.scaleY = 0.8;
+ itemButtons.push(button);
+ }
+}
+function createItemCallback(itemIndex) {
+ return function () {
+ useItem(itemIndex);
+ };
+}
+function useItem(itemIndex) {
+ var player = currentPlayer === 1 ? player1 : player2;
+ var itemName = player.items[itemIndex];
+ switch (itemName) {
+ case 'magnifying_glass':
+ var nextBullet = revolver.peekNext();
+ if (nextBullet === null) {
+ infoText.setText('Chamber is empty');
+ } else {
+ infoText.setText('Next bullet is: ' + (nextBullet ? 'LIVE' : 'BLANK'));
+ }
+ break;
+ case 'handcuffs':
+ infoText.setText('Opponent will skip their next turn');
+ // This will be handled in switchTurn
+ break;
+ case 'cigarettes':
+ player.heal();
+ infoText.setText('Health restored');
+ break;
+ }
+ // Remove used item
+ player.items.splice(itemIndex, 1);
+ createItemButtons(player);
+ LK.getSound('click').play();
+ // Don't end turn when using items
+}
+function shootOpponent() {
+ if (gamePhase !== 'playing') return;
+ var result = revolver.fire();
+ var opponent = currentPlayer === 1 ? player2 : player1;
+ if (result === true) {
+ // Live round - opponent takes damage
+ LK.getSound('gunshot').play();
+ opponent.takeDamage();
+ infoText.setText('BANG! Opponent hit!');
+ if (!opponent.isAlive) {
+ endGame(currentPlayer);
+ return;
+ }
+ } else if (result === false) {
+ // Blank round
+ LK.getSound('click').play();
+ infoText.setText('*Click* - Blank round');
+ } else {
+ // Empty chamber
+ LK.getSound('click').play();
+ infoText.setText('*Click* - Empty chamber');
+ }
+ // End turn
+ LK.setTimeout(function () {
+ switchTurn();
+ }, 1500);
+}
+function shootSelf() {
+ if (gamePhase !== 'playing') return;
+ var result = revolver.fire();
+ var currentPlayerObj = currentPlayer === 1 ? player1 : player2;
+ if (result === true) {
+ // Live round - current player takes damage
+ LK.getSound('gunshot').play();
+ currentPlayerObj.takeDamage();
+ infoText.setText('BANG! You hit yourself!');
+ if (!currentPlayerObj.isAlive) {
+ endGame(currentPlayer === 1 ? 2 : 1);
+ return;
+ }
+ // End turn
+ LK.setTimeout(function () {
+ switchTurn();
+ }, 1500);
+ } else if (result === false) {
+ // Blank round - continue turn
+ LK.getSound('click').play();
+ infoText.setText('*Click* - Blank! Continue your turn');
+ // Don't switch turns
+ } else {
+ // Empty chamber
+ LK.getSound('click').play();
+ infoText.setText('*Click* - Empty chamber');
+ // End turn
+ LK.setTimeout(function () {
+ switchTurn();
+ }, 1500);
+ }
+}
+function switchTurn() {
+ // Check if revolver is empty
+ var remaining = revolver.getRemainingRounds();
+ if (remaining.live === 0 && remaining.blank === 0) {
+ // Start new round
+ round++;
+ setupRound();
+ return;
+ }
+ // Check for handcuffs effect
+ var currentPlayerObj = currentPlayer === 1 ? player1 : player2;
+ var hasHandcuffs = false;
+ for (var i = 0; i < currentPlayerObj.items.length; i++) {
+ if (currentPlayerObj.items[i] === 'handcuffs') {
+ hasHandcuffs = true;
+ currentPlayerObj.items.splice(i, 1);
+ break;
+ }
+ }
+ if (hasHandcuffs) {
+ infoText.setText('Handcuffs used - opponent skips turn');
+ // Don't switch player
+ createItemButtons(currentPlayerObj);
+ updateTurn();
+ return;
+ }
+ // Normal turn switch
+ currentPlayer = currentPlayer === 1 ? 2 : 1;
+ updateTurn();
+}
+function updateTurn() {
+ var currentPlayerObj = currentPlayer === 1 ? player1 : player2;
+ turnText.setText('Player ' + currentPlayer + ' Turn');
+ turnText.tint = currentPlayer === 1 ? 0x00aaff : 0xff00aa;
+ // Update item buttons
+ createItemButtons(currentPlayerObj);
+ // Show remaining rounds
+ var remaining = revolver.getRemainingRounds();
+ if (remaining.live === 0 && remaining.blank === 0) {
+ infoText.setText('Revolver empty - New round starting...');
+ LK.setTimeout(function () {
+ round++;
+ setupRound();
+ }, 2000);
+ } else {
+ infoText.setText(remaining.live + ' live, ' + remaining.blank + ' blank remaining');
+ }
+}
+function endGame(winner) {
+ gamePhase = 'gameover';
+ // Disable all buttons
+ for (var i = 0; i < buttons.length; i++) {
+ buttons[i].setEnabled(false);
+ }
+ for (var i = 0; i < itemButtons.length; i++) {
+ itemButtons[i].setEnabled(false);
+ }
+ infoText.setText('Player ' + winner + ' Wins!');
+ turnText.setText('Game Over');
+ LK.setScore(winner);
+ LK.setTimeout(function () {
+ LK.showYouWin();
+ }, 2000);
+}
+// Start the game
+setupRound();
\ No newline at end of file
Haceme un humano desde arriba sentado realista. con camisa amarilla
Haceme un humano desde arriba sentado realista. con camisa roja
Escopeta realista. In-Game asset. 2d. High contrast. No shadows
Pistola realista. In-Game asset. 2d. High contrast. No shadows
Revolver realista. In-Game asset. 2d. High contrast. No shadows
Bala realista. In-Game asset. 2d. High contrast. No shadows
Papel realista. In-Game asset. 2d. High contrast. No shadows
Mesa desde arriba Realista. In-Game asset. 2d. High contrast. No shadows
Barra de salud verde. In-Game asset. 2d. High contrast. No shadows