HOTFIX: Restore missing commas in game data files

ISSUE:
- Previous effects removal script incorrectly deleted commas when removing effects objects
- This caused JSON syntax errors throughout all game mode data files
- Files had orphaned commas on separate lines and missing commas between properties

FIXED:
- Added comma restoration scripts (fix-commas.js, clean-orphaned-commas.js)
- Restored proper comma placement after preview/type/text properties
- Removed orphaned commas that were left on their own lines
- Fixed property separation in choice arrays and step objects

VERIFIED:
- All game mode data files now pass Node.js syntax checking
- trainingGameData.js:  Valid syntax
- humiliationGameData.js:  Valid syntax
- dressUpGameData.js:  Valid syntax
- enduranceGameData.js:  Valid syntax

Game mode data files are now syntactically correct and functional.
This commit is contained in:
dilgenfritz 2025-10-30 16:07:28 -05:00
parent ab9297b2b8
commit 41a353a143
6 changed files with 225 additions and 120 deletions

View File

@ -0,0 +1,51 @@
/**
* Script to remove orphaned commas and fix JSON structure in game mode files
*/
const fs = require('fs');
const path = require('path');
const gameModeFiles = [
'src/data/modes/trainingGameData.js',
'src/data/modes/humiliationGameData.js',
'src/data/modes/dressUpGameData.js',
'src/data/modes/enduranceGameData.js'
];
function cleanOrphanedCommas(filePath) {
console.log(`Cleaning orphaned commas in: ${filePath}`);
let content = fs.readFileSync(filePath, 'utf8');
// Remove lines that are just commas with whitespace
content = content.replace(/^\s*,\s*$/gm, '');
// Remove double commas
content = content.replace(/,,+/g, ',');
// Fix lines where comma is separated from the property
// Find patterns like: property: "value"\n,\n and fix to property: "value",\n
content = content.replace(/(["\w]+:\s*"[^"]*")\s*\n\s*,\s*\n/g, '$1,\n');
content = content.replace(/(["\w]+:\s*\d+)\s*\n\s*,\s*\n/g, '$1,\n');
content = content.replace(/(["\w]+:\s*'[^']*')\s*\n\s*,\s*\n/g, '$1,\n');
fs.writeFileSync(filePath, content);
console.log(`Cleaned orphaned commas in: ${filePath}`);
}
function main() {
console.log('Cleaning orphaned commas in game mode files...');
gameModeFiles.forEach(file => {
const fullPath = path.join(process.cwd(), file);
if (fs.existsSync(fullPath)) {
cleanOrphanedCommas(fullPath);
} else {
console.log(`File not found: ${fullPath}`);
}
});
console.log('All orphaned commas cleaned!');
}
main();

54
scripts/fix-commas.js Normal file
View File

@ -0,0 +1,54 @@
/**
* Script to fix missing commas in game mode data files after effects removal
*/
const fs = require('fs');
const path = require('path');
const gameModeFiles = [
'src/data/modes/trainingGameData.js',
'src/data/modes/humiliationGameData.js',
'src/data/modes/dressUpGameData.js',
'src/data/modes/enduranceGameData.js'
];
function fixCommasInFile(filePath) {
console.log(`Fixing commas in: ${filePath}`);
let content = fs.readFileSync(filePath, 'utf8');
// Fix missing commas after preview/type/text lines followed by nextStep with proper spacing
content = content.replace(/("preview": "[^"]*")\s*\n(\s*nextStep:)/g, '$1,\n$2');
content = content.replace(/("type": "[^"]*")\s*\n(\s*nextStep:)/g, '$1,\n$2');
content = content.replace(/("text": "[^"]*")\s*\n(\s*nextStep:)/g, '$1,\n$2');
// Fix missing commas after any property followed by nextStep (without quotes around nextStep)
content = content.replace(/([^,])\s*\n(\s*nextStep:\s*"[^"]*")/g, '$1,\n$2');
// Fix missing commas in choice/step objects - between } and { on different lines
content = content.replace(/(\})\s*\n(\s*\{)/g, '$1,\n$2');
// Fix missing commas after duration/actionText followed by nextStep
content = content.replace(/(duration: \d+)\s*\n(\s*nextStep:)/g, '$1,\n$2');
content = content.replace(/("actionText": "[^"]*")\s*\n(\s*nextStep:)/g, '$1,\n$2');
fs.writeFileSync(filePath, content);
console.log(`Fixed commas in: ${filePath}`);
}
function main() {
console.log('Fixing missing commas in game mode files...');
gameModeFiles.forEach(file => {
const fullPath = path.join(process.cwd(), file);
if (fs.existsSync(fullPath)) {
fixCommasInFile(fullPath);
} else {
console.log(`File not found: ${fullPath}`);
}
});
console.log('All comma issues fixed!');
}
main();

View File

@ -62,25 +62,25 @@ const dressUpGameData = {
{
text: "Forced feminization makeover",
type: "feminization",
preview: "Complete transformation into a sissy"
preview: "Complete transformation into a sissy",
nextStep: "feminization_path"
},
{
text: "Humiliating sissy maid outfit",
type: "maid",
preview: "Degrading maid costume and poses"
preview: "Degrading maid costume and poses",
nextStep: "maid_path"
},
{
text: "Slutty schoolgirl transformation",
type: "schoolgirl",
preview: "Inappropriate schoolgirl outfit and poses"
preview: "Inappropriate schoolgirl outfit and poses",
nextStep: "schoolgirl_path"
},
{
text: "Bimbo princess dress-up",
type: "bimbo",
preview: "Over-the-top feminine and degrading"
preview: "Over-the-top feminine and degrading",
nextStep: "bimbo_path"
}
]
@ -90,7 +90,7 @@ const dressUpGameData = {
mood: 'humiliating',
story: "The photographer forces you into a frilly pink dress, applies makeup to your face, and puts a blonde wig on your head. 'Look at what a pathetic little sissy you make! Edge while I take pictures of your humiliation. The more aroused you get, the more feminine and submissive you'll look in the photos.'",
actionText: "Edge while being feminized and photographed",
duration: 240
duration: 240,
nextStep: "feminization_progression"
},
maid_path: {
@ -98,7 +98,7 @@ const dressUpGameData = {
mood: 'degrading',
story: "The photographer hands you a skimpy maid outfit with a short frilly skirt. 'Put this on, sissy maid. You're going to pose like the submissive little servant you are. Edge while I photograph your humiliation. Show me how pathetic you look in that outfit.'",
actionText: "Edge while posing as a degraded sissy maid",
duration: 300
duration: 300,
nextStep: "maid_progression"
},
schoolgirl_path: {
@ -106,7 +106,7 @@ const dressUpGameData = {
mood: 'inappropriate',
story: "The photographer tosses you a slutty schoolgirl outfit - tiny plaid skirt, tight white shirt, and pigtails. 'Time to play dress-up, little girl. You're going to pose like the naughty schoolgirl slut you are. Edge while I capture your shame.'",
actionText: "Edge while posing as a slutty schoolgirl",
duration: 180
duration: 180,
nextStep: "schoolgirl_progression"
},
bimbo_path: {
@ -114,7 +114,7 @@ const dressUpGameData = {
mood: 'bimbo',
story: "The photographer pulls out the most degrading outfit yet - a hot pink mini dress, massive fake breasts, blonde bimbo wig, and platform heels. 'Time to complete your transformation into a brainless bimbo slut. Edge while I photograph how pathetic and desperate you look. Show me what a dumb little bimbo you are.'",
actionText: "Edge while posing as a humiliated bimbo",
duration: 360
duration: 360,
nextStep: "bimbo_progression"
},
feminization_progression: {
@ -125,13 +125,13 @@ const dressUpGameData = {
{
text: "Take sissy humiliation photos now",
type: "photography",
preview: "Capture your feminized shame"
preview: "Capture your feminized shame",
nextStep: "feminization_photo_session"
},
{
text: "More extreme feminization",
type: "extreme_feminization",
preview: "Push your sissy transformation further"
preview: "Push your sissy transformation further",
nextStep: "extreme_feminization_path"
}
]
@ -144,13 +144,13 @@ const dressUpGameData = {
{
text: "Take maid humiliation photos now",
type: "photography",
preview: "Document your maid degradation"
preview: "Document your maid degradation",
nextStep: "maid_photo_session"
},
{
text: "Force you to clean while dressed as maid",
type: "cleaning",
preview: "Humiliating cleaning tasks"
preview: "Humiliating cleaning tasks",
nextStep: "cleaning_path"
}
]
@ -163,13 +163,13 @@ const dressUpGameData = {
{
text: "Take slutty schoolgirl photos now",
type: "photography",
preview: "Capture your schoolgirl shame"
preview: "Capture your schoolgirl shame",
nextStep: "schoolgirl_photo_session"
},
{
text: "Pose in even more inappropriate positions",
type: "inappropriate",
preview: "More degrading schoolgirl poses"
preview: "More degrading schoolgirl poses",
nextStep: "inappropriate_path"
}
]
@ -182,13 +182,13 @@ const dressUpGameData = {
{
text: "Take bimbo humiliation photos now",
type: "photography",
preview: "Capture your bimbo transformation"
preview: "Capture your bimbo transformation",
nextStep: "bimbo_photo_session"
},
{
text: "Force you to act like a brainless bimbo",
type: "bimbo_act",
preview: "Humiliating bimbo behavior"
preview: "Humiliating bimbo behavior",
nextStep: "bimbo_act_path"
}
]
@ -226,7 +226,7 @@ const dressUpGameData = {
mood: 'extreme_humiliation',
story: "The photographer pulls out even more degrading feminine items - a frilly baby doll dress, excessive makeup, and humiliating accessories. 'Time to push your feminization to the extreme! You're going to become the most pathetic sissy possible. Edge while I document your complete transformation into a humiliated sissy slut.'",
actionText: "Edge while undergoing extreme feminization",
duration: 300
duration: 300,
nextStep: "extreme_feminization_completion"
},
extreme_feminization_completion: {
@ -241,7 +241,7 @@ const dressUpGameData = {
mood: 'maid_degradation',
story: "The photographer hands you cleaning supplies. 'Time to put that maid outfit to use! You're going to clean this studio while I photograph your humiliation. Edge while you work like the pathetic little servant you are.'",
actionText: "Edge while performing humiliating cleaning tasks",
duration: 240
duration: 240,
nextStep: "cleaning_completion"
},
cleaning_completion: {
@ -256,7 +256,7 @@ const dressUpGameData = {
mood: 'schoolgirl_degradation',
story: "The photographer directs you into increasingly inappropriate and shameful poses. 'Spread your legs wider! Bend over more! Show me how slutty you can be in that schoolgirl outfit. Edge while I capture every shameful moment.'",
actionText: "Edge while posing in degrading schoolgirl positions",
duration: 180
duration: 180,
nextStep: "inappropriate_completion"
},
inappropriate_completion: {
@ -271,7 +271,7 @@ const dressUpGameData = {
mood: 'bimbo_behavior',
story: "The photographer forces you to act like a brainless bimbo. 'Talk like a dumb slut! Giggle constantly! Show me how stupid you can be! Edge while acting like the brainless bimbo you've become while I photograph your pathetic behavior.'",
actionText: "Edge while acting like a brainless bimbo",
duration: 300
duration: 300,
nextStep: "bimbo_act_completion"
},
bimbo_act_completion: {

View File

@ -22,25 +22,25 @@ const enduranceGameData = {
{
text: "Beginner - I can edge for under a minute",
type: "beginner",
preview: "Start with short 30-second sessions"
preview: "Start with short 30-second sessions",
nextStep: "beginner_path"
},
{
text: "Intermediate - I can edge for 2-5 minutes",
type: "intermediate",
preview: "Train with 2-3 minute sessions"
preview: "Train with 2-3 minute sessions",
nextStep: "intermediate_path"
},
{
text: "Advanced - I can edge for 5+ minutes",
type: "advanced",
preview: "Challenge yourself with 5-10 minute sessions"
preview: "Challenge yourself with 5-10 minute sessions",
nextStep: "advanced_path"
},
{
text: "Expert - I can edge for 10+ minutes easily",
type: "expert",
preview: "Master-level endurance training"
preview: "Master-level endurance training",
nextStep: "expert_path"
}
]
@ -50,7 +50,7 @@ const enduranceGameData = {
mood: 'encouraging',
story: "Your trainer nods approvingly. 'Perfect starting point. We'll build your endurance gradually. Start with 30 seconds of steady edging - focus on maintaining excitement without going over. This is your foundation.'",
actionText: "30-second beginner endurance training",
duration: 30
duration: 30,
nextStep: "progression_assessment"
},
intermediate_path: {
@ -58,7 +58,7 @@ const enduranceGameData = {
mood: 'instructional',
story: "Your trainer sets a 2-minute timer. 'Good experience level. Let's work on extending your current abilities. Edge steadily for 2 minutes, maintaining consistent arousal. Feel how your endurance improves with practice.'",
actionText: "2-minute intermediate endurance session",
duration: 120
duration: 120,
nextStep: "progression_assessment"
},
advanced_path: {
@ -66,7 +66,7 @@ const enduranceGameData = {
mood: 'challenging',
story: "Your trainer sets a 5-minute timer. 'Excellent foundation! Now we push your limits. Edge for 5 full minutes without cumming. This is where real gooners distinguish themselves from casual masturbators.'",
actionText: "5-minute advanced endurance challenge",
duration: 300
duration: 300,
nextStep: "progression_assessment"
},
expert_path: {
@ -74,7 +74,7 @@ const enduranceGameData = {
mood: 'intense',
story: "Your trainer sets a 10-minute timer. 'Impressive experience! Let's test your true limits. Edge for a full 10 minutes, maintaining peak arousal without release. Only dedicated gooners can achieve this level of endurance.'",
actionText: "10-minute expert endurance marathon",
duration: 600
duration: 600,
nextStep: "mastery_assessment"
},
progression_assessment: {
@ -84,17 +84,17 @@ const enduranceGameData = {
choices: [
{
text: "Yes, increase the timer by 1 minute",
preview: "Step up to the next level"
preview: "Step up to the next level",
nextStep: "step_up_training"
},
{
text: "Double my current endurance time",
preview: "Major challenge increase"
preview: "Major challenge increase",
nextStep: "double_training"
},
{
text: "I want the maximum challenge",
preview: "Jump to 10-minute sessions"
preview: "Jump to 10-minute sessions",
nextStep: "maximum_training"
}
]
@ -104,7 +104,7 @@ const enduranceGameData = {
mood: 'progressive',
story: "Your trainer adds 1 minute to your timer. 'Gradual progression builds solid endurance. Edge for this extended time - feel how your stamina improves with each session.'",
actionText: "Progressive endurance step-up session",
duration: 180
duration: 180,
nextStep: "endurance_mastery"
},
double_training: {
@ -112,7 +112,7 @@ const enduranceGameData = {
mood: 'ambitious',
story: "Your trainer doubles your timer. 'Ambitious! This is how real progress happens. Edge for double your previous time - push through the mental barriers and build true gooning endurance.'",
actionText: "Double endurance challenge session",
duration: 360
duration: 360,
nextStep: "endurance_mastery"
},
maximum_training: {
@ -120,7 +120,7 @@ const enduranceGameData = {
mood: 'extreme',
story: "Your trainer sets the maximum 10-minute timer. 'Ultimate endurance challenge! Only the most dedicated gooners can maintain arousal for this long. Prove your commitment to the gooning lifestyle.'",
actionText: "Maximum 10-minute endurance marathon",
duration: 600
duration: 600,
nextStep: "mastery_assessment"
},
mastery_assessment: {
@ -130,12 +130,12 @@ const enduranceGameData = {
choices: [
{
text: "Master even longer sessions",
preview: "Continue building endurance"
preview: "Continue building endurance",
nextStep: "endurance_mastery"
},
{
text: "Graduate as an endurance expert",
preview: "Complete your training"
preview: "Complete your training",
nextStep: "endurance_graduation"
}
]
@ -145,7 +145,7 @@ const enduranceGameData = {
mood: 'masterful',
story: "Your trainer presents the ultimate endurance test. 'This is mastery level - edge for the full 10 minutes with perfect focus. Feel the power of true gooning endurance as you maintain arousal without release.'",
actionText: "Mastery-level 10-minute endurance test",
duration: 600
duration: 600,
nextStep: "endurance_graduation"
},
endurance_graduation: {

View File

@ -60,19 +60,19 @@ const humiliationGameData = {
{
text: "Verbal humiliation exercises",
type: "verbal",
preview: "Degrade yourself with words"
preview: "Degrade yourself with words",
nextStep: "verbal_start"
},
{
text: "Physical positioning",
type: "physical",
preview: "Assume degrading positions"
preview: "Assume degrading positions",
nextStep: "position_start"
},
{
text: "Mirror self-degradation",
type: "mirror",
preview: "Face yourself while degraded"
preview: "Face yourself while degraded",
nextStep: "mirror_start"
}
]
@ -80,13 +80,13 @@ const humiliationGameData = {
verbal_start: {
type: 'text',
mood: 'commanding',
story: "The trainer smirks. 'Verbal degradation it is. You're going to repeat after me, and you're going to mean every word. Start by saying: I am nothing but a pathetic plaything.'"
story: "The trainer smirks. 'Verbal degradation it is. You're going to repeat after me, and you're going to mean every word. Start by saying: I am nothing but a pathetic plaything.'",
nextStep: "verbal_continue"
},
position_start: {
type: 'text',
mood: 'authoritative',
story: "The trainer points to the floor. 'Get on your knees. Head down, hands behind your back. Hold this position and think about how worthless you are.'"
story: "The trainer points to the floor. 'Get on your knees. Head down, hands behind your back. Hold this position and think about how worthless you are.'",
nextStep: "position_continue"
},
mirror_start: {
@ -96,7 +96,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Look directly at yourself through the webcam while speaking the degrading phrases",
mirrorTaskText: "Repeat each phrase 3 times while maintaining eye contact: 'I am worthless', 'I exist to be degraded', 'I am nothing'",
duration: 120
duration: 120,
nextStep: "mirror_continue"
},
verbal_continue: {
@ -107,13 +107,13 @@ const humiliationGameData = {
{
text: "Repeat more intense phrases",
type: "escalate",
preview: "Deeper verbal humiliation"
preview: "Deeper verbal humiliation",
nextStep: "verbal_intense"
},
{
text: "Mirror session - face yourself",
type: "mirror",
preview: "See your degradation reflected"
preview: "See your degradation reflected",
nextStep: "mirror_escalation"
}
]
@ -126,13 +126,13 @@ const humiliationGameData = {
{
text: "Hold position longer",
type: "endurance",
preview: "Extended degrading pose"
preview: "Extended degrading pose",
nextStep: "position_extended"
},
{
text: "Mirror session - see your submission",
type: "mirror",
preview: "Watch yourself in degrading position"
preview: "Watch yourself in degrading position",
nextStep: "mirror_position"
}
]
@ -145,13 +145,13 @@ const humiliationGameData = {
{
text: "Extended mirror degradation",
type: "mirror_intense",
preview: "Longer self-humiliation session"
preview: "Longer self-humiliation session",
nextStep: "mirror_extended"
},
{
text: "Mirror while in degrading position",
type: "mirror_position",
preview: "Combine visual and physical shame"
preview: "Combine visual and physical shame",
nextStep: "mirror_position"
}
]
@ -163,7 +163,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Maintain eye contact with yourself while speaking louder and more degrading phrases",
mirrorTaskText: "Say each phrase 5 times with conviction: 'I am a pathetic loser', 'I deserve to be humiliated', 'I am worthless trash'",
duration: 180
duration: 180,
nextStep: "completion"
},
verbal_intense: {
@ -171,7 +171,7 @@ const humiliationGameData = {
mood: 'harsh',
story: "The trainer demands more intense verbal degradation. 'Say it like you mean it! Louder! More degrading!'",
actionText: "Speak harsh degrading phrases about yourself",
duration: 120
duration: 120,
nextStep: "completion"
},
position_extended: {
@ -179,7 +179,7 @@ const humiliationGameData = {
mood: 'endurance',
story: "The trainer makes you hold the degrading position longer. 'Stay in that shameful pose. Feel how degrading it is.'",
actionText: "Hold degrading position for extended time",
duration: 180
duration: 180,
nextStep: "completion"
},
mirror_position: {
@ -189,7 +189,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Hold a degrading position while watching yourself and speaking phrases",
mirrorTaskText: "While kneeling with head down, look up at camera and repeat: 'I am a disgrace', 'I deserve this shame', 'I am nothing'",
duration: 240
duration: 240,
nextStep: "completion"
},
mirror_extended: {
@ -199,7 +199,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Extended self-viewing session with continuous degrading phrases",
mirrorTaskText: "For the full duration, cycle through these phrases: 'I am pathetic', 'I am worthless', 'I deserve humiliation', 'I am nothing'",
duration: 300
duration: 300,
nextStep: "completion"
},
completion: {
@ -226,19 +226,19 @@ const humiliationGameData = {
{
text: "Start with gentle self-viewing",
type: "gentle",
preview: "Ease into mirror humiliation"
preview: "Ease into mirror humiliation",
nextStep: "gentle_mirror"
},
{
text: "Immediate intense mirror degradation",
type: "intense",
preview: "Full mirror humiliation from start"
preview: "Full mirror humiliation from start",
nextStep: "intense_mirror"
},
{
text: "Mirror with physical positioning",
type: "combined",
preview: "Visual and physical degradation"
preview: "Visual and physical degradation",
nextStep: "combined_start"
}
]
@ -250,7 +250,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Simply look at yourself and observe your feelings",
mirrorTaskText: "Look at yourself for the full duration. Pay attention to how being watched makes you feel.",
duration: 120
duration: 120,
nextStep: "escalation_choice"
},
intense_mirror: {
@ -260,7 +260,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Look directly at yourself while speaking harsh truths",
mirrorTaskText: "Say these phrases with conviction: 'I am disgusting', 'I am a failure', 'I am pathetic', 'No one could love this'",
duration: 240
duration: 240,
nextStep: "extreme_choice"
},
combined_start: {
@ -270,7 +270,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Maintain degrading position while watching yourself",
mirrorTaskText: "While kneeling, say repeatedly: 'This is what I deserve', 'I am in my proper place', 'I am beneath others'",
duration: 180
duration: 180,
nextStep: "combined_escalation"
},
escalation_choice: {
@ -281,13 +281,13 @@ const humiliationGameData = {
{
text: "Verbal self-degradation in mirror",
type: "verbal_mirror",
preview: "Speak degrading words to yourself"
preview: "Speak degrading words to yourself",
nextStep: "verbal_mirror_session"
},
{
text: "Physical poses while watching",
type: "position_mirror",
preview: "Degrading positions in full view"
preview: "Degrading positions in full view",
nextStep: "position_mirror_session"
}
]
@ -300,13 +300,13 @@ const humiliationGameData = {
{
text: "Extended brutal self-examination",
type: "extended",
preview: "Longer intense mirror session"
preview: "Longer intense mirror session",
nextStep: "extended_mirror"
},
{
text: "Combined degradation finale",
type: "finale",
preview: "Ultimate mirror humiliation"
preview: "Ultimate mirror humiliation",
nextStep: "mirror_finale"
}
]
@ -318,7 +318,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Speak degrading truths about yourself while maintaining eye contact",
mirrorTaskText: "Repeat with feeling: 'I am worthless', 'I am a disappointment', 'I am unlovable', 'I deserve this shame'",
duration: 220
duration: 220,
nextStep: "final_degradation"
},
position_mirror_session: {
@ -328,7 +328,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Hold shameful position while watching yourself",
mirrorTaskText: "In your degrading pose, say: 'This is my place', 'I deserve to be low', 'I am properly positioned'",
duration: 200
duration: 200,
nextStep: "final_degradation"
},
combined_escalation: {
@ -339,13 +339,13 @@ const humiliationGameData = {
{
text: "More extreme positions",
type: "extreme_position",
preview: "Most degrading poses possible"
preview: "Most degrading poses possible",
nextStep: "extreme_position_mirror"
},
{
text: "Verbal and physical combined",
type: "total_degradation",
preview: "Complete mirror humiliation"
preview: "Complete mirror humiliation",
nextStep: "total_degradation_mirror"
}
]
@ -357,7 +357,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Extended brutal self-examination session",
mirrorTaskText: "For the entire time, cycle through: 'I hate what I see', 'I am disgusting', 'I am a failure', 'I deserve nothing'",
duration: 360
duration: 360,
nextStep: "completion"
},
extreme_position_mirror: {
@ -367,7 +367,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Hold the most shameful position while watching yourself",
mirrorTaskText: "In your most degrading pose, repeat: 'This is what I am', 'I deserve worse', 'I am below human'",
duration: 300
duration: 300,
nextStep: "completion"
},
total_degradation_mirror: {
@ -377,7 +377,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Combine shameful positioning with brutal self-verbal degradation",
mirrorTaskText: "While in degrading position, say continuously: 'I am nothing', 'I am worthless', 'I deserve this', 'I am completely pathetic'",
duration: 420
duration: 420,
nextStep: "completion"
},
mirror_finale: {
@ -387,7 +387,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Ultimate mirror degradation session with complete self-destruction",
mirrorTaskText: "Repeat these devastating truths: 'I am completely worthless', 'I deserve to be humiliated', 'I am lower than dirt', 'I am absolutely nothing'",
duration: 480
duration: 480,
nextStep: "completion"
},
final_degradation: {
@ -397,7 +397,7 @@ const humiliationGameData = {
interactiveType: "mirror-task",
mirrorInstructions: "Final degrading mirror session to complete your humiliation",
mirrorTaskText: "For the final time, tell yourself: 'I am completely broken', 'I am thoroughly humiliated', 'I know my place', 'I am properly degraded'",
duration: 180
duration: 180,
nextStep: "completion"
},
completion: {

View File

@ -53,25 +53,25 @@ const trainingGameData = {
{
text: "Edging endurance training",
type: "endurance",
preview: "Learn to edge for hours without cumming"
preview: "Learn to edge for hours without cumming",
nextStep: "edging_path"
},
{
text: "Porn addiction enhancement",
type: "addiction",
preview: "Deepen your love and need for pornography"
preview: "Deepen your love and need for pornography",
nextStep: "addiction_path"
},
{
text: "Gooning mindset development",
type: "mindset",
preview: "Embrace the gooner lifestyle completely"
preview: "Embrace the gooner lifestyle completely",
nextStep: "mindset_path"
},
{
text: "Advanced masturbation techniques",
type: "technique",
preview: "Master sophisticated stroking methods"
preview: "Master sophisticated stroking methods",
nextStep: "technique_path"
}
]
@ -83,17 +83,17 @@ const trainingGameData = {
choices: [
{
text: "Start with basic 30-minute edges",
preview: "Build fundamental edging skills"
preview: "Build fundamental edging skills",
nextStep: "basic_edging"
},
{
text: "Jump to marathon edging sessions",
preview: "Train for multi-hour gooning"
preview: "Train for multi-hour gooning",
nextStep: "marathon_edging"
},
{
text: "Learn advanced edging patterns",
preview: "Master complex stroking rhythms"
preview: "Master complex stroking rhythms",
nextStep: "pattern_edging"
}
]
@ -103,7 +103,7 @@ const trainingGameData = {
mood: 'patient',
story: "Your instructor guides you through proper edging technique. 'Start slow, build arousal over 30 minutes. Feel how the porn makes you throb. This is just the beginning - real gooners edge for hours. Focus on the pleasure, worship the porn, but don't you dare cum.'",
actionText: "30-minute basic edging training session",
duration: 120
duration: 120,
nextStep: "edging_assessment"
},
pattern_edging: {
@ -111,7 +111,7 @@ const trainingGameData = {
mood: 'technical',
story: "Your instructor demonstrates complex stroking patterns. 'Advanced gooners master sophisticated rhythms and techniques. You'll learn variable speed patterns, pressure control, and rhythm changes that maximize pleasure while maintaining perfect edge focus.'",
actionText: "Advanced edging pattern training",
duration: 150
duration: 150,
nextStep: "edging_assessment"
},
edging_assessment: {
@ -121,17 +121,17 @@ const trainingGameData = {
choices: [
{
text: "Continue building endurance",
preview: "Work on longer edging sessions"
preview: "Work on longer edging sessions",
nextStep: "endurance_mastery"
},
{
text: "Move to advanced training",
preview: "Progress to expert techniques"
preview: "Progress to expert techniques",
nextStep: "advanced_training"
},
{
text: "Explore different training paths",
preview: "Try other aspects of gooner training"
preview: "Try other aspects of gooner training",
nextStep: "addiction_path"
}
]
@ -141,7 +141,7 @@ const trainingGameData = {
mood: 'intense',
story: "Your instructor nods approvingly. 'Ambitious! Let's see if you can handle real gooner training. Edge continuously for 2 hours, building and building but never cumming. Feel how the porn controls you, how your cock throbs for it. This is what true gooners do - they live on the edge.'",
actionText: "2-hour marathon edging session",
duration: 300
duration: 300,
nextStep: "endurance_mastery"
},
addiction_path: {
@ -151,17 +151,17 @@ const trainingGameData = {
choices: [
{
text: "Increase daily porn consumption",
preview: "Train to watch more porn every day"
preview: "Train to watch more porn every day",
nextStep: "consumption_training"
},
{
text: "Develop porn dependency habits",
preview: "Make porn essential to your daily life"
preview: "Make porn essential to your daily life",
nextStep: "dependency_training"
},
{
text: "Master porn worship techniques",
preview: "Learn to properly worship pornography"
preview: "Learn to properly worship pornography",
nextStep: "worship_training"
}
]
@ -171,7 +171,7 @@ const trainingGameData = {
mood: 'addictive',
story: "Your instructor pulls up endless screens of porn. 'Real gooners spend hours every day with porn. We'll train you to consume more, crave more, need more. Edge while watching multiple videos - let the porn flood your mind and control your cock.'",
actionText: "Multi-screen porn consumption while edging",
duration: 200
duration: 200,
nextStep: "addiction_deepening"
},
dependency_training: {
@ -179,7 +179,7 @@ const trainingGameData = {
mood: 'dependent',
story: "Your instructor nods approvingly. 'Excellent choice. We'll make porn absolutely essential to your daily life. You'll learn to depend on pornography for pleasure, comfort, and arousal. Start by edging while thinking about how much you need porn every single day. You cannot live without porn. When you aren't stroking to porn you are thinking about stroking to porn. Porn.... Porn.... PORN!!!!'",
actionText: "Porn dependency conditioning session",
duration: 200
duration: 200,
nextStep: "addiction_deepening"
},
worship_training: {
@ -187,7 +187,7 @@ const trainingGameData = {
mood: 'reverent',
story: "Your instructor's voice becomes reverent. 'Porn worship is an art form. You'll learn to truly appreciate and worship pornography as your master. Get on your knees and edge slowly while expressing gratitude to porn for controlling your life and giving you purpose. Thank porn for everything it does for you. Thank pornstars for their dedication to their artform. Porn is so beautiful and powerful - worship it with all your heart.'",
actionText: "Porn worship and gratitude training",
duration: 240
duration: 240,
nextStep: "addiction_deepening"
},
addiction_deepening: {
@ -197,17 +197,17 @@ const trainingGameData = {
choices: [
{
text: "Increase daily viewing requirements",
preview: "Commit to more hours of daily porn"
preview: "Commit to more hours of daily porn",
nextStep: "viewing_commitment"
},
{
text: "Develop porn craving triggers",
preview: "Learn to crave porn constantly"
preview: "Learn to crave porn constantly",
nextStep: "craving_training"
},
{
text: "Complete addiction certification",
preview: "Graduate as a certified porn addict"
preview: "Graduate as a certified porn addict",
nextStep: "advanced_training"
}
]
@ -217,7 +217,7 @@ const trainingGameData = {
mood: 'demanding',
story: "Your instructor becomes more demanding. 'Real porn addicts watch for hours every day. Commit to spending at least 30 minutes with pornography right here and now. Edge continuously while fullfilling this commitment - feel how natural and necessary this is.'",
actionText: "Daily porn viewing commitment session",
duration: 1800
duration: 1800,
nextStep: "advanced_training"
},
craving_training: {
@ -225,7 +225,7 @@ const trainingGameData = {
mood: 'addictive',
story: "Your instructor smiles wickedly. 'We'll train your brain to crave porn constantly. Every few minutes, you'll think about pornography and feel the need to stroke. Edge while programming these craving patterns into your mind.'",
actionText: "Constant porn craving conditioning",
duration: 210
duration: 210,
nextStep: "advanced_training"
},
mindset_path: {
@ -235,17 +235,17 @@ const trainingGameData = {
choices: [
{
text: "Embrace porn as your master",
preview: "Accept porn's control over your life"
preview: "Accept porn's control over your life",
nextStep: "submission_training"
},
{
text: "Develop gooner identity and pride",
preview: "Take pride in being a dedicated gooner"
preview: "Take pride in being a dedicated gooner",
nextStep: "identity_training"
},
{
text: "Learn gooner lifestyle habits",
preview: "Integrate gooning into daily life"
preview: "Integrate gooning into daily life",
nextStep: "lifestyle_training"
}
]
@ -255,7 +255,7 @@ const trainingGameData = {
mood: 'dominant',
story: "Your instructor's voice becomes commanding. 'Good. Now you'll learn to submit completely to porn. Edge while repeating: I live to serve porn. Porn controls my cock. I am nothing without pornography. Feel how true these words are as you stroke.'",
actionText: "Porn submission mantras while edging",
duration: 150
duration: 150,
nextStep: "advanced_training"
},
technique_path: {
@ -265,17 +265,17 @@ const trainingGameData = {
choices: [
{
text: "Multi-rhythm stroking patterns",
preview: "Master complex stroking rhythms"
preview: "Master complex stroking rhythms",
nextStep: "rhythm_training"
},
{
text: "Extended pleasure techniques",
preview: "Learn to maximize gooning pleasure"
preview: "Learn to maximize gooning pleasure",
nextStep: "pleasure_training"
},
{
text: "Advanced edging control methods",
preview: "Perfect your edge focus"
preview: "Perfect your edge focus",
nextStep: "control_training"
}
]
@ -285,7 +285,7 @@ const trainingGameData = {
mood: 'rhythmic',
story: "Your instructor demonstrates complex stroking rhythms. 'Master gooners understand rhythm is everything. Try 3 short strokes in rapid succession focusing just on the tip followed by 2 long strokes going the full length of your cock. Practice these patterns while edging to perfect porn.'",
actionText: "Multi-rhythm stroking pattern training",
duration: 180
duration: 180,
nextStep: "edging_assessment"
},
pleasure_training: {
@ -293,7 +293,7 @@ const trainingGameData = {
mood: 'euphoric',
story: "Your instructor's voice becomes hypnotic. 'We'll teach you to extract maximum pleasure from every stroke. Learn to savor each sensation, multiply your arousal, and experience gooning bliss like never before. Place your finger of your other hand on your perineum to enhance the pleasure while edging. Feel every stroke intensify as you stroke small circles while stroking the length of your cock.'",
actionText: "Extended pleasure maximization training",
duration: 200
duration: 200,
nextStep: "advanced_training"
},
control_training: {
@ -301,7 +301,7 @@ const trainingGameData = {
mood: 'precise',
story: "Your instructor becomes serious. 'Control is what separates gooners from casual masturbators. You'll learn to edge precisely at the perfect point, maintaining excitement for hours without accident. Master this and you master gooning. Bring yourself right to the edge and stop. Wait for your erection to wane and then repeat it. See how many times you can do this before the timer runs out.'",
actionText: "Advanced edge focus mastery",
duration: 240
duration: 240,
nextStep: "advanced_training"
},
identity_training: {
@ -309,7 +309,7 @@ const trainingGameData = {
mood: 'transformative',
story: "Your instructor speaks with pride. 'Embrace your identity as a dedicated gooner. This isn't just what you do - this is who you are. Watch the porn on your screen and edge while reminding yourself that you are a proud gooner, devoted to the art of pleasure. Nothing else matters more than pleasuring yourself to perfect porn.'",
actionText: "Gooner identity acceptance training",
duration: 180
duration: 180,
nextStep: "advanced_training"
},
lifestyle_training: {
@ -317,7 +317,7 @@ const trainingGameData = {
mood: 'practical',
story: "Your instructor becomes practical. 'Real gooners integrate their lifestyle completely. You'll learn to schedule daily gooning time, organize your porn collection, and make gooning a central part of your routine. Edge while planning your gooner lifestyle.'",
actionText: "Gooner lifestyle integration training",
duration: 160
duration: 160,
nextStep: "advanced_training"
},
endurance_mastery: {
@ -325,7 +325,7 @@ const trainingGameData = {
mood: 'accomplished',
story: "Your instructor observes your marathon session with approval. 'Excellent endurance! You're developing real gooner stamina. Now let's push further - edge for another hour while worshipping different types of porn. Feel how each category affects your arousal differently.'",
actionText: "Extended endurance with varied porn categories",
duration: 240
duration: 240,
nextStep: "advanced_training"
},
advanced_training: {
@ -335,17 +335,17 @@ const trainingGameData = {
choices: [
{
text: "Master-level gooning challenges",
preview: "Ultimate gooner difficulty tests"
preview: "Ultimate gooner difficulty tests",
nextStep: "master_gooning"
},
{
text: "Become a certified gooner",
preview: "Graduate as a dedicated gooner"
preview: "Graduate as a dedicated gooner",
nextStep: "gooner_graduation"
},
{
text: "Continue advanced edging training",
preview: "Further develop your skills"
preview: "Further develop your skills",
nextStep: "endurance_mastery"
}
]
@ -355,7 +355,7 @@ const trainingGameData = {
mood: 'extreme',
story: "Your instructor presents the ultimate challenge. 'This is master-level gooner training. You will edge for 6 hours straight, cycling through different porn categories, changing techniques every 30 minutes, while maintaining perfect excitement without cumming. This is what separates casual masturbators from true gooners.'",
actionText: "Master-level 6-hour gooning marathon",
duration: 360
duration: 360,
nextStep: "gooner_graduation"
},
gooner_graduation: {
@ -385,19 +385,19 @@ const trainingGameData = {
{
text: "Complete beginner",
type: "novice",
preview: "Start with 30-second sessions"
preview: "Start with 30-second sessions",
nextStep: "novice_training"
},
{
text: "Some experience",
type: "experienced",
preview: "Try 2-3 minute sessions"
preview: "Try 2-3 minute sessions",
nextStep: "experienced_training"
},
{
text: "Very experienced",
type: "veteran",
preview: "Challenge with 5+ minute sessions"
preview: "Challenge with 5+ minute sessions",
nextStep: "veteran_training"
}
]
@ -407,7 +407,7 @@ const trainingGameData = {
mood: 'gentle',
story: "Perfect for beginners! Start with just 30 seconds of steady edging. Focus on building the foundation - maintain arousal without going over the edge.",
actionText: "30-second beginner assessment",
duration: 30
duration: 30,
nextStep: "completion"
},
experienced_training: {
@ -415,7 +415,7 @@ const trainingGameData = {
mood: 'challenging',
story: "Good experience level! Let's test your stamina with 2 minutes of continuous edging. Maintain steady arousal and prove your developing endurance.",
actionText: "2-minute intermediate assessment",
duration: 120
duration: 120,
nextStep: "completion"
},
veteran_training: {
@ -423,7 +423,7 @@ const trainingGameData = {
mood: 'intense',
story: "Impressive experience! Time for a real challenge - 5 minutes of sustained edging. Show your dedication and endurance mastery.",
actionText: "5-minute veteran assessment",
duration: 300
duration: 300,
nextStep: "completion"
},
completion: {