Apps Home
|
Create an App
Metronome Masturbation Game
Author:
wantonmaleslut
Description
Source Code
Launch App
Current Users
Created by:
Wantonmaleslut
// vars var tippers = []; var subject_is_set_with_0 = false; var current_speed = 50; var is_metronome_started = false; var tips_required_to_start = 0; var speed_locked = false; var speed_locked_for = 0; var in_control_user = null; var in_control_tipped = 0; var tipperViewModel = function (user, tip) { var self = this; self.user = user; self.totalTipped = tip; self.isInRoom = true; }; cb.settings_choices = [ { name: 'start_speed', label: 'start speed - in beats per minute (bpm)', type: 'int', minValue: 1, default: 50, maxValue: 200 }, { name: 'speed_locked_for', label: 'speed locked for (in seconds). countdown until someone can speed up or slow down metronome', type: 'int', minValue: 0, default: 60 }, { name: 'tips_required_to_start', label: 'tips required to start (set to 0 to allow users to manually start without tipping)', type: 'int', minValue: 0, default: 10 } ]; // handlers cb.onTip(function (tip) { var tipFrom = tip['from_user']; var tipAmount = parseInt(tip['amount']) var totalTippedByUser = tipAmount; var tipperIsInArray = false; for (var i = 0; i < tippers.length; i++) { if (tippers[i].user == tip['from_user']) { totalTippedByUser += tippers[i].totalTipped; tippers[i].totalTipped += tipAmount; tipperIsInArray = true; } } if (!tipperIsInArray) { tippers.push(new tipperViewModel(tipFrom, totalTippedByUser)); } if (totalTippedByUser > in_control_tipped) { in_control_tipped = totalTippedByUser; in_control_user = tipFrom; } if (tips_required_to_start > 0) { tips_required_to_start = (tipAmount >= tips_required_to_start) ? 0 : (tips_required_to_start - tipAmount); if (tips_required_to_start === 0) { startMetronome(); } else { update_subject(); } } cb.drawPanel(); }); cb.onDrawPanel(function (user) { var speedValue = is_metronome_started ? current_speed + 'bpm' : (tips_required_to_start > 0) ? tips_required_to_start + " tokens to start" : "Stopped"; return { 'template': '3_rows_of_labels', 'row1_label': 'Current Speed:', 'row1_value': speedValue, 'row2_label': 'Speed Locked For:', 'row2_value': speed_locked_for > 0 ? speed_locked_for + ' seconds' : '--', 'row3_label': 'In Control:', 'row3_value': in_control_user != null ? format_username(in_control_user) + '[' + in_control_tipped + ']' : '--' }; }); cb.onMessage(function (msg) { var messageLength = msg['m'].length; if (!messageLength || messageLength <2) return; var firstCharacter = msg['m'].substring(0,1); if (firstCharacter == "+" || firstCharacter == "-" && parseInt(msg['m'].substring(1))) { if (!is_metronome_started) { var message = tips_required_to_start ? tips_required_to_start + " more tokens required to start the action" : "You must start the metronome first. Type '/start'"; sendNotice(message); } else if (in_control_user != null && msg['user'] != in_control_user) { sendNotice("Sorry " + msg['user'] + ". You are not in control.\nYou need to tip " + tipsToTakeControl(msg['user']) + " more tokens to take control.", msg['user']); } else if (speed_locked > 0) { sendNotice("The Speed is locked. Please wait: " + speed_locked_for + " seconds, and try again."); } else{ var speedChange = parseInt(msg['m'].substring(1)); if (speedChange <= 10) { if (firstCharacter == "+") { current_speed += speedChange; } else { current_speed -= speedChange } speedChanged(); } else { sendNotice("Invalid Speed Change. Must be +/- 10. Please Try Again.") } } } else if (msg['m'] == '/help') { var user = msg['user'] != cb.room_slug ? msg['user'] : null; printHelp(user); } else if (msg['m'] == '/start') { if (is_metronome_started) { sendNotice("The metronome is already started. Type '/help' for a list of commands."); } else if (tips_required_to_start > 0) { sendNotice(tips_required_to_start + " more tokens required to start the action"); } else { startMetronome(); } } else if (msg['m'] == '/stop') { if (is_metronome_started) { stopMetronome(); } else { sendNotice("The metronome is already stopped. Type '/help' for a list of commands."); } } else if (msg['m'] == '/reset' && msg['user'] == cb.room_slug) { resetSpeed(); } else if (msg['m'].substring(0, 6) == '/speed' && msg['user'] == cb.room_slug) { var newSpeed = parseInt(msg['m'].substring(6, (msg['m'].length))); if (newSpeed) { current_speed = newSpeed; speedChanged(); } } }); function tipsToTakeControl(user) { var totalTippedByUser = 0; for (var i = 0; i < tippers.length; i++) { var tipper = tippers[i]; if (tipper.user == user) { totalTippedByUser = tipper.totalTipped; } } return in_control_tipped - totalTippedByUser + 1; } function sendNotice(message, user) { if (user==null) user = ''; cb.sendNotice(message, user, '', '#4D9494', 'bold'); } cb.onEnter(function (user) { toggleisInRoom(user['user']); printHelp(user['user']); }); cb.onLeave(function (user) { toggleisInRoom(user['user']); }); function toggleisInRoom(user) { for (var i = 0; i < tippers.length; i++) { var tipper = tippers[i]; if (tipper.user == user) { tippers[i].isInRoom = tipper.isInRoom ? false : true; makeHighestTipperInControl(); return; } } } function makeHighestTipperInControl() { var newUserInControl = null; var newUserInControlTips = 0; for (var i = 0; i < tippers.length; i++) { var tipper = tippers[i]; if (tipper.isInRoom && tipper.totalTipped > newUserInControlTips) { newUserInControl = tipper.user; newUserInControlTips = tipper.totalTipped; } } in_control_user = newUserInControl; in_control_tipped = newUserInControlTips; cb.drawPanel(); } // helper functions function update_subject() { var new_subject = "#metronome masturbation game. You control the action. "; if (is_metronome_started) { new_subject += "Current Speed: " + current_speed + "bpm. " } else if (tips_required_to_start > 0) { new_subject += "[" + tips_required_to_start + " tokens to start]. " } new_subject += " Type /help for commands"; cb.log("Changing subject to: " + new_subject); cb.changeRoomSubject(new_subject); } function printHelp(user) { var message = "*** Metronome Game - Help ***\n" + "Either Tease me or try and make me cum\n" + "I have to stroke at the speed of the metronome, and try not to cum\n" + "You control the speed of the metronome:\n" + "Type '+5' to speed up by 5 bpm (beats per minute)\n" + "Type '+10' to speed up by 10 bpm\n" + "Type '-5' to slow down by 5 bpm\n" + "Type '-10' to slow down by 10 bpm\n" + "Type '/stop' to pause the action and tease me and the room\n" + "Type '/start' to start the metronome and the action (If required token count has been met)\n" + "The Highest Tipper (total tips) gains control of the speed"; if (cb.settings.speed_locked_for > 0) { message += "\nThe speed is locked for " + cb.settings.speed_locked_for + " seconds after each command"; } sendNotice(message, user); } function checkSpeedLock() { if (speed_locked) { if (speed_locked_for > 0) { speed_locked_for--; cb.setTimeout(checkSpeedLock, 1000); } if (speed_locked_for == 0) { sendNotice("Speed unlocked. Anyone can now speed up or slow down.\n" + "Type '/help' for instructions"); speed_locked = false; } } cb.drawPanel(); } function resetSpeed() { current_speed = cb.settings.start_speed; speedChanged(); } function speedChanged() { if (!is_metronome_started) return; sendNotice("Speed set to: " + current_speed + "bpm"); if (cb.settings.speed_locked_for > 0) { speed_locked_for = cb.settings.speed_locked_for; speed_locked = true; sendNotice("Speed locked for: " + speed_locked_for + " seconds"); cb.setTimeout(checkSpeedLock, 1000); } cb.drawPanel(); update_subject(); } function format_username(val) { if (val === null) { return "--"; } else { return val.substring(0, 12); } } function startMetronome() { is_metronome_started = true; tips_required_to_start = 0; update_subject(); cb.drawPanel(); } function stopMetronome() { is_metronome_started = false; update_subject(); cb.drawPanel(); } function init() { current_speed = cb.settings.start_speed; tips_required_to_start = cb.settings.tips_required_to_start; update_subject(); printHelp(); } init();
© Copyright Chaturbate 2011- 2026. All Rights Reserved.