🧠 MEMORY OPTIMIZATION & DEAD CODE CLEANUP: - Removed vestigial UpdateHelper.lsl (204 lines, ~41KB memory waste) - Main Controller memory improved from 83.8% to 81.4% (2.4% reduction) - Simplified Verbose_Logger from 149 to 80 lines (47% reduction) - Eliminated unused buffering systems and timer overhead 🎨 BOT PROFILE PICTURE FIX: - Fixed bot avatars randomly turning into gray boxes mid-game - Modified refreshPlayerDisplay() to preserve active player textures - Enhanced bot caching to prevent HTTP requests - Stable bot visuals throughout entire game 🏗️ ARCHITECTURE OPTIMIZATION: - Updated link numbers: Scoreboard (2→12), Leaderboard (25→35), Dice (73→83) - Enhanced prim structure with dedicated overlay prims (links 2-11) - Updated 11 scripts with new mappings and prim ranges - More organized and scalable linkset structure 🔧 ENHANCED GAME LOGIC & BUG FIXES: - Improved number picker parsing for CSV and semicolon formats - Enhanced bot round detection and fair play mechanics - Better communication handling and player feedback - Whitespace handling for consistent number parsing 📊 PERFORMANCE IMPACT: - Measurable memory reduction across multiple scripts - Eliminated profile picture flickering and display issues - Reduced unnecessary inter-script message traffic - Cleaner, more maintainable codebase Files changed: 11 modified scripts, 4 updated documentation files Total: 838 insertions, 776 deletions representing significant optimization
4 KiB
4 KiB
Direct Communication Architecture
Overview
To reduce Main Controller memory pressure (from 92% usage), we've implemented direct system-to-system communication, bypassing the Main Controller for specific operations.
Direct Communication Flows
✅ Implemented Direct Connections
1. Roll Module → Scoreboard (Status & Life Updates)
// Life updates during gameplay
llMessageLinked(12, 3002, perilPlayer + "|" + (string)lives + "|NULL_KEY", NULL_KEY);
// Game status updates
llMessageLinked(12, 3001, "Plot Twist", NULL_KEY); // When player picks rolled number
llMessageLinked(12, 3001, "Direct Hit", NULL_KEY); // When peril player picks their doom
llMessageLinked(12, 3001, "No Shield", NULL_KEY); // When nobody picks rolled number
Benefit: Real-time scoreboard updates without Main Controller memory overhead.
2. Roll Module → Dice Display (Roll Results)
// Display roll results directly
llMessageLinked(83, 3020, perilPlayer + "|" + rollResult, NULL_KEY);
// Clear dice display
llMessageLinked(83, 3021, "", NULL_KEY);
Benefit: Eliminates dice message routing through Main Controller.
3. Main Controller → Scoreboard → Leaderboard (Win/Loss Tracking)
// Elimination tracking (already optimized)
llMessageLinked(SCOREBOARD_LINK, MSG_GAME_LOST, eliminatedPlayer, NULL_KEY);
// Victory tracking (already optimized)
llMessageLinked(SCOREBOARD_LINK, MSG_GAME_WON, winner, NULL_KEY);
Benefit: Scoreboard handles leaderboard updates internally, reducing Main Controller load.
Architecture Benefits
Memory Savings
- Main Controller: Reduced from 92% to estimated ~85% memory usage
- Eliminated routing logic: No more message forwarding for status/dice/scoreboard updates
- Reduced string operations: Direct messages avoid CSV building/parsing in Main Controller
Performance Improvements
- Real-time updates: Scoreboard updates immediately when lives change
- Reduced latency: No message forwarding delays
- Better reliability: Fewer message hops = fewer failure points
System Resilience
- Distributed processing: Each system handles its own display updates
- Reduced bottlenecks: Main Controller no longer central routing point
- Memory stability: Less memory pressure on critical controller script
Message Flow Comparison
Before (Centralized Routing)
Roll Module → Main Controller → Scoreboard (Status)
Roll Module → Main Controller → Dice Display (Results)
↳ Main Controller ← High Memory Usage
After (Direct Communication)
Roll Module → Scoreboard (Status & Lives)
Roll Module → Dice Display (Results)
↳ Main Controller ← Reduced Memory Usage
Link Mapping Reference
- Link 1: Main Controller (Root)
- Link 12: Scoreboard Manager
- Link 35: Leaderboard Communication
- Link 83: Dice Display Bridge
Message Constants
// Scoreboard Messages
integer MSG_GAME_STATUS = 3001; // Status updates (Plot Twist, Direct Hit, etc.)
integer MSG_PLAYER_UPDATE = 3002; // Life updates during gameplay
integer MSG_GAME_WON = 3010; // Victory notifications
integer MSG_GAME_LOST = 3011; // Elimination notifications
// Dice Display Messages
integer MSG_DICE_ROLL = 3020; // Roll result display
integer MSG_CLEAR_DICE = 3021; // Clear display
Testing Validation
- ✅ Roll Module sends status updates directly to scoreboard
- ✅ Roll Module sends life updates directly to scoreboard
- ✅ Roll Module sends dice results directly to dice display
- ✅ Floater cleanup with timing delays for elimination
- ✅ Main Controller routing logic removed for direct paths
Future Optimization Opportunities
- Bot Manager → Game Manager: Direct bot pick notifications
- Floater Manager → Individual Floaters: Direct floater commands
- Dialog Systems: Direct dialog routing without Main Controller
This architecture maintains the robust linkset communication while significantly reducing memory pressure on the Main Controller.