Files
Last-Days-of-Rome/script.js
Keith Solomon 00e123b432 Initial commit
2025-08-15 06:25:45 -05:00

90 lines
3.6 KiB
JavaScript

document.addEventListener('DOMContentLoaded', () => {
const rollButton = document.getElementById('roll-button');
const assassinateButton = document.getElementById('assassinate-button');
const newGameButton = document.getElementById('new-game-button');
const themeSwitchButton = document.getElementById('theme-switch');
const flamesScore = document.getElementById('flames');
const desolationScore = document.getElementById('desolation');
const relocationScore = document.getElementById('relocation');
const logList = document.getElementById('log-list');
const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
const savedTheme = localStorage.getItem('theme');
if (savedTheme) {
document.body.setAttribute('data-theme', savedTheme);
} else if (prefersDark) {
document.body.setAttribute('data-theme', 'dark');
}
themeSwitchButton.addEventListener('click', () => {
const currentTheme = document.body.getAttribute('data-theme');
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
document.body.setAttribute('data-theme', newTheme);
localStorage.setItem('theme', newTheme);
});
rollButton.addEventListener('click', () => {
fetch('game.php?action=roll_dice')
.then(response => response.json())
.then(data => {
updateScores(data.scores);
logEvent(data.event);
checkGameState(data.gameState);
});
});
assassinateButton.addEventListener('click', () => {
fetch('game.php?action=assassinate')
.then(response => response.json())
.then(data => {
logEvent(data.event);
checkGameState(data.gameState);
});
});
newGameButton.addEventListener('click', () => {
fetch('game.php?action=reset_game')
.then(response => response.json())
.then(data => {
updateScores(data.scores);
logList.innerHTML = '';
rollButton.disabled = false;
assassinateButton.disabled = false;
newGameButton.style.display = 'none';
});
});
function updateScores(scores) {
flamesScore.textContent = scores.flames;
desolationScore.textContent = scores.desolation;
relocationScore.textContent = scores.relocation;
}
function logEvent(event) {
const li = document.createElement('li');
li.textContent = event;
logList.prepend(li);
}
function checkGameState(gameState) {
if (gameState !== 'ongoing') {
rollButton.disabled = true;
assassinateButton.disabled = true;
newGameButton.style.display = 'block';
let message = '';
if (gameState === 'win') {
message = 'You have escaped the city! You win!';
} else if (gameState === 'loss_flames') {
message = 'You were burned alive. You lose.';
} else if (gameState === 'loss_desolation') {
message = 'You were killed in the rampage. You lose.';
} else if (gameState === 'win_assassination') {
message = 'You have assassinated the emperor! You die a martyr, but you win!';
} else if (gameState === 'loss_assassination') {
message = 'Your attempt to assassinate the emperor has failed. You are executed. You lose.';
}
setTimeout(() => alert(message), 100);
}
}
});