Horror Survival Game Scenario Generator

Generate terrifying situations. Choose your nightmare...

(Focus: ${generatedScenarioData.focus}) ${generatedScenarioData.objective}

${generatedScenarioData.complication ? `

Twist / Complication:

${generatedScenarioData.complication}

` : ''} `; resultsDiv.style.display = 'block'; pdfBtn.disabled = false; } // --- PDF Download Function --- function downloadPDF() { if (!generatedScenarioData || !generatedScenarioData.atmosphere) { alert("Please generate a scenario first."); return; } // Ensure jsPDF is loaded if (typeof jspdf === 'undefined' || typeof jspdf.jsPDF === 'undefined') { console.error("jsPDF library or jsPDF constructor is not loaded correctly."); alert("Error: PDF generation library failed to load. Please check internet connection or Elementor setup."); return; } const { jsPDF } = jspdf; const doc = new jsPDF(); // --- PDF Styling --- const primaryColor = '#b71c1c'; // Red const secondaryColor = '#616161'; // Grey const accentColor = '#ffa000'; // Amber const textColor = '#212121'; // Dark text for PDF const pageMargin = 15; const lineSpacing = 7; // Slightly more spacing for PDF let currentY = pageMargin; const pageHeight = doc.internal.pageSize.height; const pageWidth = doc.internal.pageSize.width; // Helper to add text with page breaks function addTextToPDF(text, size, color, style = 'normal') { doc.setFont("helvetica", style); // Standard font for PDF doc.setFontSize(size); doc.setTextColor(color); const splitText = doc.splitTextToSize(text, pageWidth - pageMargin * 2); splitText.forEach(line => { if (currentY + lineSpacing > pageHeight - pageMargin) { doc.addPage(); currentY = pageMargin; // Reset font on new page doc.setFont("helvetica", style); doc.setFontSize(size); doc.setTextColor(color); } doc.text(line, pageMargin, currentY); currentY += lineSpacing; }); } function addHeadingPDF(text) { addTextToPDF(text.toUpperCase() + ":", 12, primaryColor, 'bold'); // Red, bold heading currentY += lineSpacing * 0.1; } function addParagraphPDF(text) { addTextToPDF(text, 10, textColor); currentY += lineSpacing * 0.4; // Space after paragraph } function addMetaPDF(text) { addTextToPDF(text, 9, secondaryColor, 'italic'); // Grey, italic meta info currentY += lineSpacing * 0.1; } // --- PDF Content --- addTextToPDF("Horror Survival Scenario", 16, primaryColor, 'bold'); addMetaPDF(`Threat: ${generatedScenarioData.threat} | Setting: ${generatedScenarioData.setting} | Focus: ${generatedScenarioData.focus}`); currentY += lineSpacing; addHeadingPDF("Atmosphere"); addParagraphPDF(generatedScenarioData.atmosphere); addHeadingPDF("Threat Hint"); addParagraphPDF(generatedScenarioData.threatHint); addHeadingPDF("Your Situation"); addMetaPDF(`(Role Hint: ${generatedScenarioData.playerHint})`); addParagraphPDF(generatedScenarioData.situation); addHeadingPDF("Objective"); addParagraphPDF(generatedScenarioData.objective); if (generatedScenarioData.complication) { addHeadingPDF("Twist / Complication"); addTextToPDF(generatedScenarioData.complication, 10, accentColor, 'bolditalic'); // Amber, bold, italic twist } // --- Save PDF --- const safeFileName = `horror_scenario_${generatedScenarioData.threat}_${generatedScenarioData.setting}`.replace(/[^a-z0-9_]/gi, '_').toLowerCase(); doc.save(`${safeFileName}.pdf`); } // --- Event Listeners --- // Check elements exist before adding listeners if (generateBtn) { generateBtn.addEventListener('click', generateScenario); } else { console.error("Generate button not found! Check ID: horror-generate-btn-a4b9e"); } // **Correction**: Ensure PDF button ID matches HTML and JS variable const pdfButtonElement = document.getElementById('horror-pdf-btn-a4b9e'); // Use correct ID from HTML plan if (pdfButtonElement) { pdfButtonElement.addEventListener('click', downloadPDF); } else { console.error("PDF button not found! Check ID: horror-pdf-btn-a4b9e"); } })(); // Immediately invoke the function
Scroll to Top