select * FROM sqlpage_shell; -- Display the list of players with a link for each one to start playing INSERT INTO players(name, game_id) SELECT $Player as name, CAST($id AS INTEGER) as game_id WHERE $Player IS NOT NULL; SELECT 'list' as component, 'Players' as title; SELECT name as title, sqlpage.link( 'next-question.sql', json_object( 'game_id', game_id, 'player', name ) ) as link FROM players WHERE game_id = CAST($id AS INTEGER); --------------------------- -- Player insertion form -- --------------------------- SELECT 'form' as component, 'Add a new player' as title, 'Add to game' as validate; SELECT 'Player' as name, 'Player name' as placeholder, TRUE as autofocus; -- Insert a new question into the game_questions table for each new player INSERT INTO game_questions( game_id, question_id, wrong_answer, impostor, game_order ) SELECT CAST($id AS INTEGER) as game_id, questions.id as question_id, -- When the true answer is small, set the wrong answer to just +/- 1, otherwise -25%/+75%. -- When it is a date between 1200 and 2100, make it -25 % or +75 % of the distance to today CAST(CASE WHEN questions.true_answer < 10 THEN questions.true_answer + 1 - 2 * abs(random() %2) -- wrong answer = true answer +/- 1 WHEN questions.true_answer > 1200 AND questions.true_answer < 2100 THEN 2023 - (2023 - questions.true_answer) * (abs(random() %2) + 0.75) -- wrong answer = true answer -25% or +75% of the distance to today ELSE questions.true_answer * (abs(random() %2) + 0.75) END AS INTEGER) as wrong_answer, -- wrong answer = true answer +/- 50% TODO: better wrong answer generation $Player as impostor, random() as game_order FROM questions LEFT JOIN game_questions ON questions.id = game_questions.question_id AND game_questions.game_id = CAST($id AS INTEGER) WHERE game_questions.question_id IS NULL AND $Player IS NOT NULL ORDER BY random() LIMIT 1;