switched timeing configs to Peril_Constants file

This commit is contained in:
RebeccaNod1 2026-04-05 20:14:15 -06:00
parent 5b8b9d0a7b
commit 5816e7cce2
12 changed files with 78 additions and 53 deletions

View file

@ -41,7 +41,7 @@ integer LISTEN_CHANNEL; // Will be set dynamically
integer listenHandle = -1;
// Bot timing configuration to prevent dialog system overload
#define BOT_RESPONSE_DELAY 1.5 // Delay before bot responds to commands
// BOT_RESPONSE_DELAY defined in Peril_Constants.lsl
// Memory monitoring
#define MEMORY_WARNING_THRESHOLD 0.8 // Warn when using >80% of memory

View file

@ -1,3 +1,5 @@
#include "Peril_Constants.lsl"
// ====================================================================
// Enhanced Link Scanner for Peril Dice Linkset
// ====================================================================
@ -65,7 +67,7 @@ performFullScan() {
// Add delays to prevent spam
if (i % 15 == 0) {
llSleep(1.5);
llSleep(DELAY_SCAN_LINKSET);
}
}

View file

@ -31,7 +31,7 @@ default {
dbg("📋 [Leaderboard] Leaderboard Communication Script ready! (Virtual Multi-Column)");
// Wait for engine to be ready, then register virtual columns
llSleep(1.0);
llSleep(DELAY_LEADERBOARD_SYNC);
// Registering virtual columns inside the physical "Leaderboard" mesh
// Format: fw_addbox:NewName:ParentName:x,y,w,h
@ -43,7 +43,7 @@ default {
// --- STARTUP HANDSHAKE ---
// Wait a moment for the engine to process ADD_BOX, then ask Scoreboard for a fresh update
llSleep(0.5);
llSleep(DELAY_LEADERBOARD_READY);
llMessageLinked(LINK_SET, MSG_DISPLAY_LEADERBOARD, "REFRESH_STARTUP", NULL_KEY);
// Start with blank display

View file

@ -26,7 +26,7 @@ default {
dbg("📊 [Status Bridge] Status Display Bridge ready!");
// Wait a tiny bit for Furware to be ready, then set initial text
llSleep(1.0);
llSleep(DELAY_BRIDGE_READY);
updateStatusDisplay("PERIL DICE GAME\nWaiting for players...");
}

View file

@ -173,7 +173,7 @@ default {
integer ch = FLOATER_BASE_CHANNEL + channelIdx;
llRezObject("StatFloat", pos, ZERO_VECTOR, ZERO_ROTATION, ch);
llSleep(0.2);
llSleep(DELAY_FLOATER_REZ);
llRegionSay(ch, "SET_NAME:" + name);
// --- HUD UPGRADE: Attach to Humans ---
@ -363,7 +363,7 @@ default {
// Redundant broadcast for total coverage
llRegionSay(chTarget, "CLEANUP");
llSleep(0.05);
llSleep(DELAY_FLOATER_UPDATE);
}
// Clear ALL registries to allow fresh re-registration via Rez Guard
allPlayerNames = [];

View file

@ -12,11 +12,6 @@ string getPlayerName(key id) {
return displayName;
}
// Game timing settings
#define BOT_PICK_DELAY 2.0
#define HUMAN_PICK_DELAY 1.0
#define DIALOG_DELAY 1.5
#define STATUS_DISPLAY_TIME 8.0
// Game state - synced from Main Controller
list players = [];
list names = [];
@ -163,13 +158,13 @@ integer continueCurrentRound() {
llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "PREPARING ROUND...\nCalculating dice size...", NULL_KEY);
// Dramatic pause to let the preparation message be read
llSleep(4.0);
llSleep(DELAY_LONG_SYNC);
// NEW: Update status bar for new round with colored highlight
llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "NEW ROUND STARTING!\nPeril: <!c=red>" + perilPlayer, NULL_KEY);
// Dramatic pause to let the peril player be seen before the dice type is shown
llSleep(4.0);
llSleep(DELAY_LONG_SYNC);
// Note: showNextPickerDialog() will be called when dice type result is received
return 0;
@ -224,7 +219,7 @@ integer startNextRound() {
// Sync state to floater manager first, then update floaters to show new peril player immediately
dbg("🔄 [Game Manager] Syncing state and updating floaters for new peril player: " + perilPlayer);
syncStateToMain(); // Sync the peril player to all modules first
llSleep(0.1); // Brief delay to ensure sync propagates
llSleep(DELAY_SHORT_SYNC); // Brief delay to ensure sync propagates
integer startJ;
for (startJ = 0; startJ < llGetListLength(names); startJ++) {
string startPlayerName = llList2String(names, startJ);
@ -235,7 +230,7 @@ integer startNextRound() {
llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "ROUND STARTING!\nPeril: <!c=red>" + perilPlayer, NULL_KEY);
// Dramatic pause to let the first peril player be seen before round prep begins
llSleep(4.0);
llSleep(DELAY_LONG_SYNC);
}
picksData = [];
@ -261,7 +256,7 @@ integer startNextRound() {
llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "PREPARING ROUND...\nCalculating dice size...", NULL_KEY);
// Dramatic pause to let the preparation message be read
llSleep(4.0);
llSleep(DELAY_LONG_SYNC);
dbg("🎯 Game Manager round setup complete, requesting dice type...");
return 0;
@ -406,7 +401,7 @@ integer showNextPickerDialog() {
string dialogPayload = firstName + "|" + (string)diceType + "|" + (string)humanPicksNeeded + "|" + humanAvoidListStr;
dbg("🎯 Showing pick dialog for " + firstName);
llSleep(0.5); // Brief delay to prevent spam
llSleep(DELAY_ANTI_SPAM); // Brief delay to prevent spam
// Send dialog request through Player_RegistrationManager (it has the correct player keys)
string dialogRequest = "SHOW_DIALOG|" + firstName + "|" + dialogPayload;
@ -677,7 +672,7 @@ default {
llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "DICE READY!\nRolling a d" + str + " this round", NULL_KEY);
// Dramatic pause to let players see the dice type before picking starts
llSleep(4.0);
llSleep(DELAY_LONG_SYNC);
// Start dialog if round has been started and we have a queue
if (roundStarted && currentPickerIdx < llGetListLength(pickQueue) && llGetListLength(pickQueue) > 0 && diceType > 0) {
@ -697,7 +692,7 @@ default {
if (!alreadyHasPicks) {
dbg("🎯 Starting picks for " + currentPlayerName);
llSleep(0.5);
llSleep(DELAY_ANTI_SPAM);
showNextPickerDialog();
}
}
@ -820,7 +815,7 @@ default {
llList2CSV(names), NULL_KEY);
// Brief delay to ensure sync reaches Floater Manager before update request
llSleep(0.1);
llSleep(DELAY_SHORT_SYNC);
// Now update the floater
llMessageLinked(LINK_SET, MSG_UPDATE_FLOAT, playerName, llList2Key(players, idx));
@ -840,7 +835,7 @@ default {
// CRITICAL: Sync the updated picks data to all modules before roll phase
dbg("🔄 [Game Manager] Syncing final picks data before roll phase...");
syncStateToMain();
llSleep(1.0); // Longer delay to ensure sync propagates to all modules
llSleep(DELAY_MEDIUM_SYNC); // Longer delay to ensure sync propagates to all modules
// Send roll dialog through Player_RegistrationManager
dbg("🎯 [Game Manager] Sending roll dialog request for: " + perilPlayer);
@ -896,7 +891,7 @@ default {
// CRITICAL: Sync the updated picks data to all modules before roll phase
dbg("🔄 [Game Manager] Syncing final picks data before roll phase...");
syncStateToMain();
llSleep(1.0); // Longer delay to ensure sync propagates to all modules
llSleep(DELAY_MEDIUM_SYNC); // Longer delay to ensure sync propagates to all modules
// Force close any active number picker dialogs
dbg("🚫 [Game Manager] Sending CLOSE_ALL_DIALOGS command");
@ -969,7 +964,7 @@ default {
llList2CSV(names), NULL_KEY);
// Brief delay to ensure sync reaches Floater Manager before update request
llSleep(0.1);
llSleep(DELAY_SHORT_SYNC);
// Now update the floater
llMessageLinked(LINK_SET, MSG_UPDATE_FLOAT, playerName, NULL_KEY);
@ -1006,7 +1001,7 @@ default {
// CRITICAL: Sync the updated picks data to all modules before roll phase
dbg("🔄 [Game Manager] Syncing final picks data before roll phase...");
syncStateToMain();
llSleep(0.2); // Brief delay to ensure sync propagates
llSleep(DELAY_DIALOG_REFRESH); // Brief delay to ensure sync propagates
// Force close any active number picker dialogs
dbg("🚫 [Game Manager] Sending CLOSE_ALL_DIALOGS command");

View file

@ -698,7 +698,7 @@ integer updatePlayerDisplay(string playerName, integer lives, string profileUUID
]);
// Remove the glow after a moment to make it normal
llSleep(0.1);
llSleep(DELAY_SCOREBOARD_REFRESH);
llSetLinkPrimitiveParamsFast(updateProfilePrimIndex, [
PRIM_GLOW, ALL_SIDES, 0.0 // Remove glow
]);
@ -903,7 +903,7 @@ default {
]);
// Remove the glow after a moment to make it normal
llSleep(0.1);
llSleep(DELAY_SCOREBOARD_REFRESH);
llSetLinkPrimitiveParamsFast(profilePrimIndex, [
PRIM_GLOW, ALL_SIDES, 0.0 // Remove glow
]);

View file

@ -91,10 +91,6 @@ list pendingRegistrations = []; // Keys of players who have registration in pro
key currentPicker;
// Game timing settings
#define BOT_PICK_DELAY 2.0
#define HUMAN_PICK_DELAY 1.0
#define DIALOG_DELAY 1.5
integer gameTimer = 0;
// Dynamic channel system for floaters and dialogs (still needed for external communication)
@ -295,9 +291,9 @@ resetGame() {
// Let Floater Manager handle cleanup intelligently
// Always request cleanup on a reset to ensure no orphans are left behind
llMessageLinked(LINK_SET, MSG_CLEANUP_ALL_FLOATERS, "RESET", NULL_KEY);
llSleep(0.5);
llSleep(DELAY_STATE_TRANSITION);
llSleep(0.5);
llSleep(DELAY_STATE_TRANSITION);
players = names = lives = picksData = globalPickedNumbers = readyPlayers = [];
floaterChannels = [];
@ -330,7 +326,7 @@ resetGame() {
// NEW: Update status bar for idle state
sendStatusMessage("PERIL DICE GAME\nTouch to Join!");
llSleep(0.5);
llSleep(DELAY_STATE_TRANSITION);
llSetTimerEvent(0);
initListeners();
@ -659,11 +655,11 @@ default {
// Direct floater update to ensure eliminated status is displayed
llMessageLinked(LINK_SET, MSG_UPDATE_FLOAT, eliminatedPlayer, llList2Key(players, idx));
llSleep(2.0); // Give floater time to show eliminated status with red display
llSleep(DELAY_ELIMINATION_NOTICE); // Give floater time to show eliminated status with red display
if (willCauseVictory) {
// If this elimination will cause victory, give extra time for 0 hearts display
llSleep(1.5); // Additional time for victory scenarios
llSleep(DELAY_VICTORY_NOTICE); // Additional time for victory scenarios
}
// CHANGED: Don't cleanup floaters during elimination - let them show eliminated status
@ -713,7 +709,7 @@ default {
// ENHANCED: Give eliminated player's floater time to show eliminated status
// before declaring victory and cleaning up
dbg("⏳ [Main Controller] Final elimination detected - allowing display time before victory");
llSleep(2.0); // Give final eliminated player time to show red eliminated status
llSleep(DELAY_ELIMINATION_NOTICE); // Give final eliminated player time to show red eliminated status
// CRITICAL: Set victory flag immediately to prevent sync processing
victoryInProgress = TRUE;
@ -783,7 +779,7 @@ default {
// Optimized to avoid large temporary string variables
llMessageLinked(LINK_SET, MSG_SYNC_GAME_STATE,
llList2CSV(lives) + "~EMPTY~" + perilPlayer + "~" + llList2CSV(names), NULL_KEY);
llSleep(0.5); // Give sync time to propagate
llSleep(DELAY_SYNC_PROPAGATION); // Give sync time to propagate
// Continue the game with the new peril player - delegate to Game Manager
llMessageLinked(LINK_SET, 998, perilPlayer, NULL_KEY);
@ -801,7 +797,7 @@ default {
dbg("🚨 [Main Controller] Emergency reset triggered - sending emergency reset to all scripts");
// Signal all scripts to emergency reset
llMessageLinked(LINK_SET, MSG_EMERGENCY_RESET, "EMERGENCY_RESET", NULL_KEY);
llSleep(0.5);
llSleep(DELAY_SYNC_PROPAGATION);
// Then do full reset
resetGame();
return;
@ -814,7 +810,7 @@ default {
string winner = llList2String(parts, 1);
// Send dice roll winner message using LINK_SET
llMessageLinked(LINK_SET, MSG_DICE_ROLL, winner + "|WON", NULL_KEY);
llSleep(2.0);
llSleep(DELAY_GAME_RESET);
resetGame();
}
return;
@ -1165,7 +1161,7 @@ default {
string playerName = llList2String(names, i);
key playerKey = llList2Key(players, i);
llMessageLinked(LINK_SET, MSG_REZ_FLOAT, playerName, playerKey);
llSleep(0.3);
llSleep(DELAY_GENERIC_TICK);
}
dbg("✅ Floater creation requests sent for all players!");
@ -1249,7 +1245,7 @@ default {
sendStatusMessage("GAME STARTING!\nAll players are ready!");
// Dramatic pause to let the start announcement be read before round prep begins
llSleep(4.0);
llSleep(DELAY_LONG_SYNC);
// For game start, use empty peril player - Game Manager will select one
llMessageLinked(LINK_SET, 998, "", NULL_KEY);

View file

@ -149,3 +149,35 @@ key EXPERIENCE_ID = "06926390-26e6-11f1-a452-0242ac110003"; // Final Girlz I.N.C
// --- Helper Functions Support ---
#define MSG_GET_PICKS_REQUIRED 1002
#define MSG_GET_PICKER_INDEX 1003
// --- Timing & Delays ---
#define DELAY_SCAN_LINKSET 1.5 // Link scanner delay
#define DELAY_DIALOG_REFRESH 0.2 // Brief delay before refreshing/showing dialog (0.2s)
#define DELAY_BRIDGE_READY 1.0 // Delay for bridge initialization (1.0s)
#define DELAY_LEADERBOARD_SYNC 1.0 // Delay for leaderboard synchronization (1.0s)
#define DELAY_LEADERBOARD_READY 0.5 // Delay for leaderboard system readiness (0.5s)
#define DELAY_FLOATER_REZ 0.2 // Delay between floater rezzing (0.2s)
#define DELAY_FLOATER_UPDATE 0.05 // Very brief delay for floater updates (0.05s)
#define DELAY_SCOREBOARD_REFRESH 0.1 // Scoreboard refresh delay (0.1s)
#define DELAY_STATE_TRANSITION 0.5 // Generic state transition sleep (0.5s)
#define DELAY_ELIMINATION_NOTICE 2.0 // Time given to show eliminated status (2.0s)
#define DELAY_VICTORY_NOTICE 1.5 // Additional time for victory scenarios (1.5s)
#define DELAY_SYNC_PROPAGATION 0.5 // Time for linked messages to propagate (0.5s)
#define DELAY_GAME_RESET 2.0 // Delay during full system reset (2.0s)
#define DELAY_GENERIC_TICK 0.3 // Generic tick delay (0.3s)
#define DELAY_LONG_SYNC 4.0 // Long dramatic pause or heavy sync (4.0s)
#define DELAY_SHORT_SYNC 0.1 // Very short sync buffer (0.1s)
#define DELAY_MEDIUM_SYNC 1.0 // Medium sync buffer (1.0s)
#define DELAY_ANTI_SPAM 0.5 // Delay to prevent message loops/spam (0.5s)
#define DELAY_CONFETTI_START 2.0 // Delay before confetti effects (2.0s)
#define DELAY_CONFETTI_DURATION 4.0 // Duration confetti stays active (4.0s)
#define DELAY_CONFETTI_TICK 0.2 // Confetti particle interval (0.2s)
#define DELAY_CONFETTI_PREP 0.5 // Confetti preparation delay (0.5s)
#define DELAY_FLOAT_UPDATE 0.1 // Floater status update delay (0.1s)
// --- Game Timing Settings (Originals relocated here) ---
#define BOT_PICK_DELAY 2.0 // Bot picking decision time (2.0s)
#define HUMAN_PICK_DELAY 1.0 // Human picking buffer (1.0s)
#define DIALOG_DELAY 1.5 // Base dialog presentation delay (1.5s)
#define STATUS_DISPLAY_TIME 8.0 // How long status text stays on display (8.0s)
#define BOT_RESPONSE_DELAY 1.5 // Bot response timing (1.5s)

View file

@ -93,7 +93,7 @@ default {
dbg("🧹 [Status Float] CLEANUP signal received. Detaching from avatar...");
llDetachFromAvatar();
// Fallback for non-attachments
llSleep(0.1);
llSleep(DELAY_FLOAT_UPDATE);
llDie();
}
else if (llSubStringIndex(message, "ATTACH_TO:") == 0) {

View file

@ -681,7 +681,7 @@ default {
string pick = llGetSubString(msg, 8, -1);
string payload = "REMOVE_PICK~" + currentPickTarget + "|" + pick;
llMessageLinked(LINK_THIS, MSG_PICK_ACTION, payload, id);
llSleep(0.2);
llSleep(DELAY_DIALOG_REFRESH);
llMessageLinked(LINK_THIS, MSG_OWNER_PICK_MANAGER, currentPickTarget, id);
}
// Handle kick player selection
@ -720,7 +720,7 @@ default {
}
string payload = "ADD_PICK~" + currentPickTarget + "|" + msg;
llMessageLinked(LINK_THIS, MSG_PICK_ACTION, payload, id);
llSleep(0.2);
llSleep(DELAY_DIALOG_REFRESH);
llMessageLinked(LINK_THIS, MSG_OWNER_PICK_MANAGER, currentPickTarget, id);
}
// Handle position scan responses from follower displays

View file

@ -267,7 +267,7 @@ default {
dbg("🎲 [Roll Module] 🤖 " + str + " (bot) is requesting dice type for auto-roll...");
// Give a moment for "DICE IN THE AIR" message to be seen for bots
llSleep(2.0);
llSleep(DELAY_CONFETTI_START);
rollInProgress = TRUE; // Set roll in progress for bot
shouldRoll = TRUE; // Set flag to perform roll when dice type is received
@ -343,7 +343,7 @@ default {
llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "DICE SETTLED!\n" + perilPlayer + " rolled a " + resultStr + "!", NULL_KEY);
// Dramatic pause to let the roll result be seen before the win/loss outcome pops up
llSleep(4.0);
llSleep(DELAY_LONG_SYNC);
string newPeril = "";
integer matched = FALSE;
@ -389,7 +389,7 @@ default {
llMessageLinked(LINK_SCOREBOARD, MSG_UPDATE_PERIL_PLAYER, newPeril, NULL_KEY); // MSG_UPDATE_PERIL_PLAYER
// Add delay to let status display before next phase
llSleep(4.0);
llSleep(DELAY_LONG_SYNC);
// Update floaters immediately to show correct peril player before sync
llMessageLinked(LINK_SET, MSG_UPDATE_FLOAT, newPeril, NULL_KEY);
@ -425,20 +425,20 @@ default {
llMessageLinked(LINK_SCOREBOARD, MSG_GAME_STATUS, "Direct Hit", NULL_KEY);
llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "DIRECT HIT!\n<!c=red>" + perilPlayer + " matched!", NULL_KEY);
// Add delay to let status display before next phase
llSleep(4.0);
llSleep(DELAY_LONG_SYNC);
} else if (!matched) {
llSay(0, "🩸 NO SHIELD! Nobody picked " + resultStr + " - " + perilPlayer + " takes the hit from the d" + (string)diceType + "! 🩸");
// Direct scoreboard status update (texture and text)
llMessageLinked(LINK_SCOREBOARD, MSG_GAME_STATUS, "No Shield", NULL_KEY);
llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "NO SHIELD!\n<!c=red>" + perilPlayer + " took the hit!", NULL_KEY);
// Add delay to let status display before next phase
llSleep(4.0);
llSleep(DELAY_LONG_SYNC);
} else {
// This should never happen in normal game flow since Plot Twist case is handled above
// But if it does, it means someone else picked it - this should have been Plot Twist
dbg("🎲 [Roll Module] ⚠️ LOGIC ERROR: Someone picked " + resultStr + " but not handled as Plot Twist!");
llSay(0, "🩸 SHIELD FAILED! " + perilPlayer + " takes the hit despite someone picking " + resultStr + "! 🩸");
llSleep(2.0);
llSleep(DELAY_ELIMINATION_NOTICE);
}
llMessageLinked(LINK_SET, MSG_UPDATE_FLOAT, perilPlayer, NULL_KEY);
@ -490,7 +490,7 @@ default {
llDumpList2String(picksData, "^") + "~" +
perilForSync + "~" +
llList2CSV(names), NULL_KEY);
llSleep(0.2);
llSleep(DELAY_DIALOG_REFRESH);
// Additional floater updates to ensure correct peril player display
dbg("🎲 [Roll Module] 🔄 Updating all floaters with new peril player: " + perilPlayer);
@ -504,7 +504,7 @@ default {
dbg("🎲 [Roll Module] 🎯 Round complete - sending continuation directly to Game Manager");
// Brief delay to ensure sync propagates
llSleep(0.5);
llSleep(DELAY_SYNC_PROPAGATION);
// Send continuation directly to Game Manager (more efficient than through Main Controller)
// For non-elimination cases, continue with current peril player