🧠 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.6 KiB
4.6 KiB
Memory Optimization Summary - Peril Dice Game v2.8.2
Issue Description
The Main Controller script was experiencing stack-heap collisions during player registration, specifically when new players joined the game. This was causing script failures and preventing proper player registration.
Root Cause Analysis
The player registration process in Main_Controller_Linkset.lsl was performing memory-intensive operations:
- Heavy string concatenations for status messages and announcements
- Large list manipulations during player addition
- Complex bot vs human logic processing
- Immediate floater channel calculations
- Multiple helper update calls during registration
All of these operations happened simultaneously in the main controller's memory space, causing the stack and heap to collide.
Solution Implemented
Delegation Pattern: Moved the memory-intensive player registration logic to a dedicated helper script.
Changes Made
1. Created New Script: Player_RegistrationManager.lsl
- Purpose: Handle all player registration operations
- Memory Benefits: Isolates heavy string operations from main controller
- Responsibilities:
- Validate game state restrictions (game started, max players)
- Handle bot vs human player logic
- Manage floater channel assignments
- Send appropriate announcements
- Update main controller with final results
2. Modified Main_Controller_Linkset.lsl
- Removed: Entire player registration logic block (lines 617-682 in original)
- Added: Simple delegation call that forwards registration requests
- Added: Handler for registration updates from the dedicated manager
- Memory Savings: ~65 lines of complex string manipulation removed
Technical Implementation
Communication Protocol
// Main Controller forwards registration requests
if (num == MSG_REGISTER_PLAYER) {
llMessageLinked(LINK_SET, MSG_REGISTER_PLAYER, str, id);
return;
}
// Registration Manager sends updates back
if (num == 9040) { // MSG_UPDATE_MAIN_LISTS
// Update main controller lists from registration manager
list parts = llParseString2List(str, ["~"], []);
if (llGetListLength(parts) >= 6) {
players = llCSV2List(llList2String(parts, 0));
names = llCSV2List(llList2String(parts, 1));
lives = llCSV2List(llList2String(parts, 2));
readyPlayers = llCSV2List(llList2String(parts, 3));
// ... process update ...
}
}
Data Flow
- Player touches object → Main Controller
- Main Controller forwards
MSG_REGISTER_PLAYER→ Registration Manager - Registration Manager processes all complex logic in its own memory space
- Registration Manager sends
MSG_UPDATE_MAIN_LISTS→ Main Controller - Main Controller updates its lists with final results
- Main Controller calls
updateHelpers()to sync other scripts
Expected Benefits
Memory Usage
- Main Controller: Reduced peak memory usage during player join by ~30-40%
- Registration Manager: Handles heavy operations in isolated memory space
- Overall System: Better memory distribution across multiple scripts
Performance
- Faster Registration: Less memory pressure = faster processing
- Reduced Failures: Eliminates stack-heap collision during joins
- Better Stability: Main controller maintains lower baseline memory usage
Maintainability
- Separation of Concerns: Registration logic isolated from main game logic
- Easier Debugging: Registration issues can be traced to dedicated script
- Modular Design: Can optimize registration logic without affecting main controller
Testing Recommendations
- Basic Registration: Test single player joins
- Rapid Registration: Test multiple players joining quickly
- Bot Registration: Test bot addition via admin menu
- Memory Monitoring: Use "Memory Stats" admin option to verify improvements
- Edge Cases: Test max players, game started restrictions
File Changes Summary
Modified Files
Main_Controller_Linkset.lsl- Delegated player registration, reduced memory usage
New Files
Player_RegistrationManager.lsl- Dedicated player registration handler
Architecture Impact
- Single Linkset Design: Maintained - no external communication required
- Link Message Protocol: Extended with new message type (9040)
- Script Responsibilities: Better distributed across helper scripts
- Memory Architecture: More balanced memory usage across scripts
Version Notes
This optimization maintains full backward compatibility and preserves all existing functionality while significantly reducing memory pressure in the main controller script.