diff --git a/client/multiplayer/room.js b/client/multiplayer/room.js index 23830a072..b5032732c 100644 --- a/client/multiplayer/room.js +++ b/client/multiplayer/room.js @@ -4,6 +4,7 @@ let validCategories = []; let validSubcategories = []; let maxPacketNumber = 24; +let powermarkPosition = 0; // Do not escape room name as that is how it is stored on the server. const ROOM_NAME = location.pathname.substring(13); @@ -130,10 +131,18 @@ socket.onmessage = function (event) { case 'update-answer': document.getElementById('answer').innerHTML = 'ANSWER: ' + data.answer; + question = (document.getElementById('question').innerHTML); + if (powermarkPosition) + question = question.slice(0, powermarkPosition) + '(*) ' + question.slice(powermarkPosition); + powerParts = question.split('(*)'); + document.getElementById('question').innerHTML = `${powerParts.length > 1 ? '' + powerParts[0] + '(*)' + powerParts[1] : powerParts[0]}`; break; case 'update-question': - document.getElementById('question').innerHTML += data.word + ' '; + if (data.word === '(*)') + powermarkPosition = document.getElementById('question').innerHTML.length; + else + document.getElementById('question').innerHTML += data.word + ' '; break; case 'year-range': @@ -351,6 +360,7 @@ const socketOnNext = (message) => { document.getElementById('next').classList.remove('btn-success'); document.getElementById('next').innerHTML = 'Skip'; document.getElementById('question').innerHTML = ''; + powermarkPosition = 0; document.getElementById('answer').innerHTML = ''; document.getElementById('buzz').innerHTML = 'Buzz'; document.getElementById('buzz').disabled = false; @@ -370,6 +380,7 @@ const socketOnStart = (message) => { logEvent(message.username, 'started the game'); document.getElementById('question').innerHTML = ''; + powermarkPosition = 0; document.getElementById('answer').innerHTML = ''; document.getElementById('buzz').innerHTML = 'Buzz'; document.getElementById('buzz').disabled = false; diff --git a/client/singleplayer/tossups.js b/client/singleplayer/tossups.js index e2aa074c8..585b4bf61 100644 --- a/client/singleplayer/tossups.js +++ b/client/singleplayer/tossups.js @@ -10,6 +10,7 @@ let validSubcategories; let currentlyBuzzing = false; let packetNumber = -1; let paused = false; +let powermarkPosition = 0; // WARNING: 0-indexed (instead of 1-indexed, like in multiplayer) let questionNumber = 0; @@ -196,6 +197,7 @@ async function next() { document.getElementById('set-name-info').innerHTML = setName; paused = false; + powermarkPosition = 0; readQuestion(new Date().getTime()); } @@ -224,7 +226,10 @@ function pause() { function readQuestion(expectedReadTime) { if (!currentlyBuzzing && questionTextSplit.length > 0) { const word = questionTextSplit.shift(); - document.getElementById('question').innerHTML += word + ' '; + if (word === '(*)') + powermarkPosition = document.getElementById('question').innerHTML.length; + else + document.getElementById('question').innerHTML += word + ' '; // calculate time needed before reading next word let time = Math.log(word.length) + 1; @@ -257,7 +262,11 @@ function reveal() { function revealQuestion() { document.getElementById('answer').innerHTML = 'ANSWER: ' + questions[questionNumber].answer; - document.getElementById('question').innerHTML += questionTextSplit.join(' '); + let question = (document.getElementById('question').innerHTML); + if (powermarkPosition) + question = question.slice(0, powermarkPosition) + '(*) ' + question.slice(powermarkPosition); + const powerParts = (question + questionTextSplit.join(' ')).split('(*)'); + document.getElementById('question').innerHTML = `${powerParts.length > 1 ? '' + powerParts[0] + '(*)' + powerParts[1] : powerParts[0]}`; document.getElementById('buzz').disabled = true; document.getElementById('buzz').innerHTML = 'Buzz';