18 KiB
Phase 3: Levels 11-20 Implementation
Priority: MEDIUM-HIGH - Advanced features and complexity
Estimated Effort: 18-24 hours
Status: Not Started
Dependencies: Phase 2 (Levels 1-10)
🎯 Phase Goals
Implement levels 11-20, covering the Mind & Body Arc (L11-15) and Advanced Training Arc (L16-20). These levels introduce hypno overlays, captions, interruptions, popups, and complex multi-feature coordination.
📋 What This Phase Delivers
Arcs Implemented:
- Mind & Body Arc (L11-15): Hypno overlays, captions, TTS+spiral combos, sensory overload
- Advanced Training Arc (L16-20): Interruptions, denial training, popup images, 90-minute marathon
Level-by-Level:
- L11: Mind Sync (75min) - Hypno + captions
- L12: Caption Conditioning (80min) - Dynamic captions based on preferences
- L13: Voice in the Spiral (85min) - TTS + hypno synchronized
- L14: Sensory Overload (90min) - Quad + hypno + TTS + captions
- L15: Mind & Body Checkpoint (100min) - Preference update + arc recap
- L16: Controlled Chaos (110min) - Interruptions unlock
- L17: The Denial Dance (120min) - Forced denial training
- L18: Popup Distraction (130min) - Random popup images
- L19: Total Immersion (140min) - All features combined
- L20: Ultimate Checkpoint (150min) - All features unlocked, preference update
End Result: Full feature suite unlocked, players mastering complex multi-feature sessions.
🏗️ Implementation Tasks
Task 1: Advanced Action Handlers (7-9 hours)
File to Update: src/features/tasks/interactiveTaskManager.js
Add handlers for L11-20 actions:
New Action Types:
Hypno + Caption Combos (L11-14):
{
type: 'hypno-caption-combo',
params: {
hypnoDuration: 180,
captions: [
{ text: 'You are a good gooner', delay: 10 },
{ text: 'Edging is pleasure', delay: 30 }
]
}
}
{
type: 'dynamic-captions',
params: {
duration: 300,
captionSource: 'preference-based', // generates based on user preferences
frequency: 15 // new caption every 15 seconds
}
}
{
type: 'tts-hypno-sync',
params: {
spiralDuration: 120,
ttsCommands: [
{ text: 'Watch the spiral...', delay: 10 },
{ text: 'Deeper...', delay: 60 }
]
}
}
{
type: 'sensory-overload',
params: {
features: ['quad-video', 'hypno', 'tts', 'captions'],
duration: 300
}
}
Interruption System (L16):
{
type: 'enable-interruptions',
params: {
types: ['edge', 'pose', 'mantra'],
frequency: 'medium', // low/medium/high
randomize: true
}
}
{
type: 'interruption',
params: {
interruptionType: 'edge', // 'edge', 'pose', 'mantra', 'stop-stroking'
duration: 30,
instruction: 'STOP! Edge right now!'
}
}
Denial Training (L17):
{
type: 'denial-training',
params: {
denialPeriods: [
{ duration: 120, instruction: 'No touching for 2 minutes' },
{ allowStroking: 60 },
{ duration: 180, instruction: 'Hands off again' }
]
}
}
{
type: 'stop-stroking',
params: {
duration: 120,
showTimer: true
}
}
Popup System (L18):
{
type: 'enable-popups',
params: {
frequency: 'medium',
sources: ['tasks', 'consequences'], // image folders
duration: 10, // seconds per popup
randomize: true
}
}
{
type: 'popup-image',
params: {
imagePath: '/images/tasks/edge.png',
duration: 10,
position: 'center' // or random
}
}
Handler Implementation:
class InteractiveTaskManager {
// ... existing handlers ...
async handleHypnoCaptionCombo(action) {
// Start hypno spiral
// Schedule captions at specified delays
// Run both simultaneously
}
async handleDynamicCaptions(action) {
// Get user preferences
// Generate captions based on themes
// Display new caption every N seconds
// Track caption history
}
async handleTTSHypnoSync(action) {
// Start spiral
// Schedule TTS commands
// Synchronize timing
}
async handleSensoryOverload(action) {
// Activate all specified features
// Quad video + hypno + TTS + captions
// Coordinate timing
}
async handleEnableInterruptions(action) {
// Set up random interruption scheduler
// Based on frequency, schedule random interruptions
// Store interruption state
}
async handleInterruption(action) {
// Pause current activities
// Show interruption overlay (STOP! EDGE!)
// Wait for user to complete
// Resume activities
}
async handleDenialTraining(action) {
// Loop through denial periods
// Enforce "hands off" periods with timer
// Allow stroking periods
}
async handleStopStroking(action) {
// Display "HANDS OFF" timer
// Count down duration
// Detect if user fails (optional)
}
async handleEnablePopups(action) {
// Set up random popup scheduler
// Based on frequency, show random images
}
async handlePopupImage(action) {
// Display image overlay
// Auto-hide after duration
}
}
Testing Checklist:
- Hypno + captions work simultaneously
- Dynamic captions generate from preferences
- TTS + hypno synchronize correctly
- Sensory overload coordinates all features
- Interruptions trigger randomly
- Denial periods enforce "hands off"
- Popups display at correct frequency
- All advanced handlers work without conflicts
Task 2: Caption System (4-5 hours)
File to Create: src/features/captions/captionManager.js
Responsibilities:
- Generate captions based on preferences
- Display captions with timing
- Track caption history
- Support manual and automatic captions
Data Structure:
const captionTemplates = {
edging: [
"You are a good gooner",
"Edge for me",
"Stroke faster",
"Slower now..."
],
sissy: [
"You're such a sissy",
"Good girl",
"Embrace your feminine side"
],
humiliation: [
"You're addicted",
"You can't stop",
"This is what you are"
],
worship: [
"Worship this body",
"You live to serve",
"Obey"
]
// ... more themes
};
Methods:
class CaptionManager {
generateCaption(themes) {
// Pick random template from enabled themes
}
displayCaption(text, duration = 5) {
// Show caption overlay
// Auto-hide after duration
}
startAutoCaptions(frequency, themes) {
// Generate and display captions every N seconds
}
stopAutoCaptions() {
// Stop auto-caption loop
}
}
UI Component:
<div id="caption-overlay" class="hidden">
<p id="caption-text"></p>
</div>
Testing Checklist:
- Captions generate from templates
- Captions respect preferences
- Auto-captions cycle correctly
- Manual captions display properly
- Caption overlay styled correctly
Task 3: Interruption System (3-4 hours)
File to Create: src/features/interruptions/interruptionManager.js
Responsibilities:
- Schedule random interruptions
- Display interruption overlays
- Pause/resume current activities
- Track interruption compliance
Interruption Types:
- Edge: "STOP! Edge right now!"
- Pose: "Hold this pose for 30 seconds"
- Mantra: "Repeat: I am a good gooner"
- Stop Stroking: "Hands off for 2 minutes"
Methods:
class InterruptionManager {
enable(frequency = 'medium') {
// Schedule random interruptions
// frequency: low (5-10min), medium (3-5min), high (1-3min)
}
disable() {
// Stop interruption scheduler
}
triggerInterruption(type, params) {
// Pause current activities
// Show interruption overlay
// Execute interruption
// Resume activities
}
scheduleNext() {
// Schedule next random interruption
}
}
UI Component:
<div id="interruption-overlay" class="modal hidden">
<h2>INTERRUPTION!</h2>
<p id="interruption-instruction"></p>
<div id="interruption-timer"></div>
<button id="interruption-complete">Done</button>
</div>
Testing Checklist:
- Interruptions trigger at correct frequency
- Interruption overlay displays
- Current activities pause
- Activities resume after interruption
- All interruption types work
Task 4: Popup Image System (2-3 hours)
File to Update: src/features/images/popupImageManager.js
Enhancements:
- Random scheduling based on frequency
- Tag-based image selection
- Auto-hide after duration
Methods:
class PopupImageManager {
enableAutoPopups(frequency, tags) {
// Schedule random popups
// Filter images by tags
}
disableAutoPopups() {
// Stop popup scheduler
}
showPopup(imagePath, duration = 10) {
// Display popup
// Auto-hide after duration
}
}
Testing Checklist:
- Popups trigger at correct frequency
- Images filtered by tags
- Popups auto-hide
- Multiple popups don't overlap
Task 5: Level Data for L11-20 (3-4 hours)
File to Update: src/data/modes/academyLevelData.js
Add levels 11-20:
const academyLevels = {
// ... L1-10 ...
11: {
name: "Mind Sync",
arc: "Mind & Body",
duration: 4500, // 75 minutes
requirements: {
minLevel: 11,
completedLevels: [10],
featuresUnlocked: ['hypno']
},
unlocks: {
level: 12,
features: ['captions']
},
sessionStructure: {
main: [
{ type: 'hypno-caption-combo', params: {
hypnoDuration: 180,
captions: [
{ text: 'You are a good gooner', delay: 10 },
{ text: 'Edging is your purpose', delay: 60 }
]
}},
{ type: 'quad-video' },
{ type: 'edge', params: { count: 75 } }
]
}
},
12: {
name: "Caption Conditioning",
arc: "Mind & Body",
duration: 4800, // 80 minutes
requirements: {
minLevel: 12,
completedLevels: [11],
featuresUnlocked: ['captions']
},
unlocks: {
level: 13
},
sessionStructure: {
main: [
{ type: 'dynamic-captions', params: {
duration: 4800,
captionSource: 'preference-based',
frequency: 20
}},
{ type: 'video-start' },
{ type: 'edge', params: { count: 80 } }
]
}
},
13: {
name: "Voice in the Spiral",
arc: "Mind & Body",
duration: 5100, // 85 minutes
requirements: {
minLevel: 13,
completedLevels: [12]
},
unlocks: {
level: 14
},
sessionStructure: {
main: [
{ type: 'tts-hypno-sync', params: {
spiralDuration: 300,
ttsCommands: [
{ text: 'Watch the spiral...', delay: 10 },
{ text: 'Deeper and deeper...', delay: 120 },
{ text: 'You are under my control...', delay: 240 }
]
}},
{ type: 'edge', params: { count: 85 } }
]
}
},
14: {
name: "Sensory Overload",
arc: "Mind & Body",
duration: 5400, // 90 minutes
requirements: {
minLevel: 14,
completedLevels: [13]
},
unlocks: {
level: 15
},
sessionStructure: {
main: [
{ type: 'sensory-overload', params: {
features: ['quad-video', 'hypno', 'tts', 'captions'],
duration: 5400
}},
{ type: 'edge', params: { count: 90 } }
]
}
},
15: {
name: "Mind & Body Checkpoint",
arc: "Mind & Body",
duration: 6000, // 100 minutes
isCheckpoint: true,
requirements: {
minLevel: 15,
completedLevels: [14]
},
unlocks: {
level: 16,
features: [],
arcsCompleted: ['Mind & Body']
},
sessionStructure: {
warmup: [
{ type: 'show-preferences', reason: 'checkpoint' }
],
main: [
{ type: 'sensory-overload', params: { features: ['quad-video', 'hypno', 'tts', 'captions'], duration: 5400 } },
{ type: 'edge', params: { count: 100 } }
],
cooldown: [
{ type: 'show-arc-complete', arc: 'Mind & Body' }
]
}
},
16: {
name: "Controlled Chaos",
arc: "Advanced Training",
duration: 6600, // 110 minutes
requirements: {
minLevel: 16,
completedLevels: [15]
},
unlocks: {
level: 17,
features: ['interruptions']
},
sessionStructure: {
main: [
{ type: 'enable-interruptions', params: { types: ['edge', 'pose'], frequency: 'medium' } },
{ type: 'quad-video' },
{ type: 'edge', params: { count: 110 } }
]
},
failureConditions: {
cumming: true,
abandoningSession: true,
closingFeatures: ['quad-video'],
ignoringInterruptions: true
}
},
17: {
name: "The Denial Dance",
arc: "Advanced Training",
duration: 7200, // 120 minutes
requirements: {
minLevel: 17,
completedLevels: [16],
featuresUnlocked: ['interruptions']
},
unlocks: {
level: 18
},
sessionStructure: {
main: [
{ type: 'denial-training', params: {
denialPeriods: [
{ duration: 300, instruction: 'Hands off for 5 minutes' },
{ allowStroking: 120 },
{ duration: 600, instruction: 'Hands off for 10 minutes' }
]
}},
{ type: 'edge', params: { count: 120 } }
]
}
},
18: {
name: "Popup Distraction",
arc: "Advanced Training",
duration: 7800, // 130 minutes
requirements: {
minLevel: 18,
completedLevels: [17]
},
unlocks: {
level: 19,
features: ['popups']
},
sessionStructure: {
main: [
{ type: 'enable-popups', params: { frequency: 'medium', sources: ['tasks', 'consequences'] } },
{ type: 'quad-video' },
{ type: 'edge', params: { count: 130 } }
]
}
},
19: {
name: "Total Immersion",
arc: "Advanced Training",
duration: 8400, // 140 minutes
requirements: {
minLevel: 19,
completedLevels: [18],
featuresUnlocked: ['popups']
},
unlocks: {
level: 20
},
sessionStructure: {
main: [
{ type: 'enable-interruptions', params: { frequency: 'high' } },
{ type: 'enable-popups', params: { frequency: 'high' } },
{ type: 'sensory-overload', params: { features: ['quad-video', 'hypno', 'tts', 'captions'] } },
{ type: 'edge', params: { count: 140 } }
]
}
},
20: {
name: "Ultimate Checkpoint",
arc: "Advanced Training",
duration: 9000, // 150 minutes
isCheckpoint: true,
requirements: {
minLevel: 20,
completedLevels: [19]
},
unlocks: {
level: 21,
features: [], // All features now unlocked
arcsCompleted: ['Advanced Training'],
durationTiers: ['Quick', 'Standard', 'Extended'] // Marathon at L25
},
sessionStructure: {
warmup: [
{ type: 'show-preferences', reason: 'checkpoint' }
],
main: [
{ type: 'enable-interruptions', params: { frequency: 'high' } },
{ type: 'enable-popups', params: { frequency: 'high' } },
{ type: 'sensory-overload', params: { features: ['quad-video', 'hypno', 'tts', 'captions'] } },
{ type: 'edge', params: { count: 150 } }
],
cooldown: [
{ type: 'show-arc-complete', arc: 'Advanced Training' },
{ type: 'show-message', text: 'All features unlocked! Duration tiers available.' }
]
}
}
};
Testing Checklist:
- All L11-20 defined
- Requirements check correctly
- Feature unlocks work
- Checkpoints at L15 and L20 trigger
📏 Measurable Test Criteria
After Phase 3, ALL of these must pass:
Level 11:
- Hypno spiral displays
- Captions appear with spiral
- Quad video plays
- Completing L11 unlocks L12
Level 12:
- Dynamic captions generate
- Captions respect preferences
- Captions cycle every 20 seconds
- Completing L12 unlocks L13
Level 13:
- TTS + hypno synchronize
- Voice commands match spiral timing
- Completing L13 unlocks L14
Level 14:
- All features activate (quad + hypno + TTS + captions)
- No feature conflicts
- Completing L14 unlocks L15
Level 15 (Checkpoint):
- Preference form appears
- Library stats display
- Mind & Body Arc completes
- Completing L15 unlocks L16
Level 16:
- Interruptions enable
- Interruptions trigger randomly
- Interruption overlay displays
- Activities pause/resume
- Completing L16 unlocks L17
Level 17:
- Denial periods enforce "hands off"
- Timer displays for denial periods
- Completing L17 unlocks L18
Level 18:
- Popups enable
- Popups display randomly
- Images filtered correctly
- Completing L18 unlocks L19
Level 19:
- All features coordinate (interruptions + popups + sensory overload)
- High frequency works without conflicts
- Completing L19 unlocks L20
Level 20 (Checkpoint):
- Preference form appears
- Advanced Training Arc completes
- Duration tiers unlock message displays
- All features confirmed unlocked
- Completing L20 unlocks L21
Overall:
- All levels L11-20 playable
- No console errors
- Progress saves after each level
- Feature unlocks persist
- Can play L11 → L20 sequentially
🎯 Success Criteria
Phase 3 Complete When:
- Levels 11-20 fully functional
- Mind & Body + Advanced Training arcs complete
- All measurable tests pass
- Caption system working
- Interruption system working
- Popup system working
- All features coordinate without conflicts
- Checkpoints at L15 and L20 work
📂 Files Created/Modified
New Files:
src/features/captions/captionManager.jssrc/features/interruptions/interruptionManager.js
Modified Files:
src/features/tasks/interactiveTaskManager.jssrc/features/images/popupImageManager.jssrc/data/modes/academyLevelData.jstraining-academy.html
🚀 Next Phase
After Phase 3: Phase 4: Levels 21-25 Path Specialization