Code edit (19 edits merged)
Please save this source code
User prompt
Update as needed with: function updateTerminal() { // Update status line var conceptString = ""; for (var category in gameState.conceptCards) { if (gameState.conceptCards[category]) { conceptString += "#" + gameState.conceptCards[category].replace(/\s+/g, '') + " "; } } // Split into two lines var statusLine1 = "DAY: " + gameState.day + "/" + gameState.maxDays + " | VIBES: " + gameState.vibePoints + "%" + " | COHERENCE: " + gameState.codeCoherence + "%" + " | BUGS: " + gameState.bugs + " | FEATURES: " + gameState.discoveredFeatures.length; var statusLine2 = conceptString; // Set as multiline text gameState.statusLineText.setText(statusLine1 + "\n" + statusLine2); var allLines = gameState.terminal.log.join('\n\n').split('\n'); // Calculate how many lines can fit in the visible area var maxVisibleLines = Math.floor(gameState.terminalMaxVisibleHeight / gameState.terminalLineHeight); // If we have more lines than can fit, trim from the top var visibleLines = allLines; if (allLines.length > maxVisibleLines) { visibleLines = allLines.slice(-maxVisibleLines); } // Update main terminal log text with only the visible lines gameState.logText.setText(visibleLines.join('\n')); // Adjust content container position to ensure it never goes below command buttons gameState.terminalContentContainer.y = gameState.terminalBaseY; // Set a maximum Y position for terminal content var maxYPosition = 2732 * 0.65; // Limit terminal to 65% of screen height // Ensure terminal doesn't go below this position if (gameState.terminalContentContainer.y + gameState.logText.height > maxYPosition) { // Calculate how much we need to scroll up to keep content within bounds var adjustment = maxYPosition - (gameState.terminalContentContainer.y + gameState.logText.height); gameState.terminalContentContainer.y += adjustment; } // Update cursor position updateCursorPosition(); }
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (13 edits merged)
Please save this source code
User prompt
Replace with: function cleanupHallucinationEffects() { // Clear the random effect interval if (gameState.randomEffectInterval) { LK.clearInterval(gameState.randomEffectInterval); gameState.randomEffectInterval = null; } // Reset text colors if (gameState.logText) { gameState.logText.fill = 0x00ff00; // Back to green } if (gameState.statusLineText) { gameState.statusLineText.fill = 0x00ff00; } if (gameState.cursor) { gameState.cursor.fill = 0x00ff00; } }
User prompt
Update with: function enterHallucinationState() { if (gameState.hallucinationMode) { updateTerminal(); gameState.isBusy = false; updateCommandButtonsState(true); if (gameState.onHallucinationComplete) { var callback = gameState.onHallucinationComplete; gameState.onHallucinationComplete = null; callback(); } return; } gameState.hallucinationMode = true; var wasBusy = gameState.isBusy; gameState.isBusy = true; updateCommandButtonsState(false); // Apply text effects (purple text only) if (gameState.logText) { gameState.logText.fill = 0xddaaff; // Subtle purple } if (gameState.statusLineText) { gameState.statusLineText.fill = 0xddaaff; } if (gameState.cursor) { gameState.cursor.fill = 0xddaaff; } // Set up random visual effects setupRandomEffectCycling(); // Original message sequence addToTerminalLogWithEffect("WaRnInG: SyStEm EnTeRiNg HaLlUcInAtIoN mOdE", function () {
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
Replace with: function splitReviewIntoSections(reviewText) { var lines = reviewText.split('\n'); var sections = []; var currentSection = null; for (var i = 0; i < lines.length; i++) { var line = lines[i].trim(); // Skip empty lines if (line === '') { continue; } // Determine section type based on content var sectionType = 'paragraph'; if (i === 0) { // First line contains concept words - identify as title sectionType = 'title'; } else if (line.startsWith('GAME: ')) { // Game name is the actual title we want to display prominently sectionType = 'gameName'; line = line.substring(6); // Remove the "GAME: " prefix } else if (line.match(/^Game Concept:/)) { sectionType = 'concept'; } else if (line.match(/^[A-Za-z]+ Review - \d+%$/)) { sectionType = 'source'; } else if (line.match(/^(Graphics|Gameplay|Technical Performance|Innovation|Vibe Factor): \d+\/10$/)) { sectionType = 'categoryHeading'; } else if (line === 'Final Thoughts' || line === 'Notable Features' || line === 'Notable Achievements') { sectionType = 'sectionHeading'; } else if (line.startsWith('"') && line.includes('" - ')) { sectionType = 'userReview'; } else if (line.startsWith('โถ')) { sectionType = 'steamReview'; } else if (line.startsWith('r/gaming hot takes:')) { sectionType = 'sectionHeading'; // Make Reddit reviews header a section heading } else if (line.startsWith('"') && line.includes('u/')) { sectionType = 'redditReview'; // New type for Reddit reviews } else if (line === '"AI slop."') { sectionType = 'redditReview'; // Special case for "AI slop" comments } else if (line.startsWith('- ')) { // Check previous sections to determine if this is a feature or achievement var prevSectionType = currentSection ? currentSection.type : ''; if (prevSectionType === 'sectionHeading' && sections[sections.length - 1].text === 'Notable Features') { sectionType = 'features'; } else if (prevSectionType === 'sectionHeading' && sections[sections.length - 1].text === 'Notable Achievements') { sectionType = 'achievements'; } else if (prevSectionType === 'features' || prevSectionType === 'achievements') { sectionType = prevSectionType; // Continue with previous type for bullet points } } // If this is a new section type or first line, start a new section if (!currentSection || sectionType !== currentSection.type) { if (currentSection) { sections.push(currentSection); } currentSection = { type: sectionType, text: line }; } else { // Continue the current section currentSection.text += '\n' + line; } } // Add the last section if exists if (currentSection) { sections.push(currentSection); } return sections; }
Code edit (7 edits merged)
Please save this source code
User prompt
Replace with: function formatReview(review) { // Generate a random review source var reviewSources = ["GameDevWeekly", "PixelPerfect", "IndieGameMag", "NextLevelGaming", "VirtualHorizon", "GameCritiqueHub", "DigitalPlayground"]; // Select a random source var source = reviewSources[Math.floor(Math.random() * reviewSources.length)]; // Use the actual calculated score from the review object var displayScore = review.mainScore; // Generate all three review types var userReviews = review.userReviews; var steamSnippets = review.steamSnippets; var redditReviews = generateRedditReviews(); // Randomly choose which two review types to include var reviewTypes = [ { type: "user", content: userReviews }, { type: "steam", content: steamSnippets }, { type: "reddit", content: redditReviews } ]; // Shuffle and take the first two reviewTypes = shuffleArray(reviewTypes); var selectedReviews = reviewTypes.slice(0, 2); // Combine the selected reviews with appropriate spacing var combinedReviews = selectedReviews.map(function(review) { return review.content; }).join("\n\n"); return review.title + "\n" + "GAME: '" + review.gameName + "'\n" + review.concept + "\n" + source + " Review - " + displayScore + "%\n\n" + review.categoryReviews.graphics + review.categoryReviews.gameplay + review.categoryReviews.technical + review.categoryReviews.innovation + review.categoryReviews.vibe + generateFeaturesSection() + generateAchievementSection(review.mainScore) + review.finalThoughts + "\n" + combinedReviews; }
Code edit (1 edits merged)
Please save this source code
Code edit (3 edits merged)
Please save this source code
User prompt
Update createasciibug with: // Make interactive for clicking/tapping bugContainer.interactive = true; bugContainer.down = function () { //Prevent double-squishing by checking flag first if (bugContainer.squished) { return; } console.log("Bug squished!"); // Bug squished! bugContainer.squished = true; // Stop movement immediately bugContainer.velocityX = 0; bugContainer.velocityY = 0; bugContainer.speed = 0; // Visual squish effect bugText.setText("*splat*"); LK.getSound('bugsquish').play(); bugText.fill = 0x00FF00; // Turn green when squished // CRITICAL FIX: Immediately reduce bug count, not in timeout gameState.bugs = Math.max(0, gameState.bugs - 1); // Remove after brief delay LK.setTimeout(function () { if (bugContainer.parent) { bugContainer.parent.removeChild(bugContainer); } // Just update terminal with new count, don't modify count again addToTerminalLogWithEffect("Bug successfully squashed! Bugs remaining: " + gameState.bugs); updateTerminal(); // If this is a party bug, check if party is complete if (gameState.activeBugParty) { checkBugPartyComplete(); } }, 800); };
User prompt
Replace with: function startBugReleaseParty() { // Create all existing bugs on screen gameState.activeBugParty = true; game.activeBugPartyBugs = []; // Track all party bugs // Save the current bug count to ensure correct number released var bugsToRelease = gameState.bugs; console.log("Starting bug party with " + bugsToRelease + " bugs"); // Critical fix: If no bugs, don't start a party at all if (bugsToRelease <= 0) { console.log("No bugs to release, skipping party"); gameState.activeBugParty = false; gameState.isBusy = false; updateCommandButtonsState(true); return "No bugs to release!"; } // Clear any existing party reset timer if (gameState.bugPartyResetTimer) { LK.clearTimeout(gameState.bugPartyResetTimer); } // Set safety timeout to force end the party if it gets stuck gameState.bugPartyResetTimer = LK.setTimeout(function() { console.log("Bug party safety timeout triggered"); forceBugPartyEnd(); }, 10000); // 10 seconds for (var i = 0; i < bugsToRelease; i++) { createBugWithProperTracking(i); } gameState.isBusy = true; updateCommandButtonsState(false); return "Released " + bugsToRelease + " bugs! Quick, squish them!"; }
User prompt
Replace with: function checkBugPartyComplete() { // Skip check if party already ended if (!gameState.activeBugParty) { console.log("Party already ended, skipping check"); return; } if (!game.activeBugPartyBugs) { console.log("Bug array missing, forcing party end"); forceBugPartyEnd(); return; } // Count active bugs var activeBugs = 0; for (var i = 0; i < game.activeBugPartyBugs.length; i++) { var bug = game.activeBugPartyBugs[i]; if (bug && bug.parent && !bug.squished && bug.escapeTimer > 0) { activeBugs++; } } console.log("Active bugs remaining: " + activeBugs); // If no active bugs remain, end the party if (activeBugs === 0) { console.log("No active bugs left, ending party"); completeBugParty(); } }
Code edit (1 edits merged)
Please save this source code
User prompt
Update as needed with: function startBugReleaseParty() { // ... existing code ... // Add safety timeout to reset if party gets stuck LK.setTimeout(function() { if (gameState.activeBugParty) { resetBugParty(); } }, 30000); // 30 second auto-reset // ... rest of existing code ... }
User prompt
Update only as needed with: function resetBugParty() { if (gameState.activeBugParty) { console.log("Resetting stuck bug party"); // Clear any remaining bugs if (game.activeBugPartyBugs) { game.activeBugPartyBugs.forEach(function(bug) { if (bug && bug.parent) { bug.parent.removeChild(bug); } }); } // Reset party state gameState.activeBugParty = false; gameState.isBusy = false; game.activeBugPartyBugs = null; updateCommandButtonsState(true); // Notify user addToTerminalLogWithEffect("Bug party reset due to stuck state. Commands enabled again."); } }
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Initialize Game ****/ // Core game setup with improved text sizes /**** * Core Game Systems ****/ // Initialize game object var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Text size multiplier for readability //resetGameProgress(); function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray4(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) { throw o; } } } }; } function _unsupportedIterableToArray4(r, a) { if (r) { if ("string" == typeof r) { return _arrayLikeToArray4(r, a); } var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray4(r, a) : void 0; } } function _arrayLikeToArray4(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) { n[e] = r[e]; } return n; } function _typeof2(o) { "@babel/helpers - typeof"; return _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof2(o); } function _defineProperty2(e, r, t) { return (r = _toPropertyKey2(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey2(t) { var i = _toPrimitive2(t, "string"); return "symbol" == _typeof2(i) ? i : i + ""; } function _toPrimitive2(t, r) { if ("object" != _typeof2(t) || !t) { return t; } var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof2(i)) { return i; } throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _toConsumableArray3(r) { return _arrayWithoutHoles3(r) || _iterableToArray3(r) || _unsupportedIterableToArray3(r) || _nonIterableSpread3(); } function _nonIterableSpread3() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray3(r, a) { if (r) { if ("string" == typeof r) { return _arrayLikeToArray3(r, a); } var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray3(r, a) : void 0; } } function _iterableToArray3(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) { return Array.from(r); } } function _arrayWithoutHoles3(r) { if (Array.isArray(r)) { return _arrayLikeToArray3(r); } } function _arrayLikeToArray3(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) { n[e] = r[e]; } return n; } function _toConsumableArray2(r) { return _arrayWithoutHoles2(r) || _iterableToArray2(r) || _unsupportedIterableToArray2(r) || _nonIterableSpread2(); } function _nonIterableSpread2() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray2(r, a) { if (r) { if ("string" == typeof r) { return _arrayLikeToArray2(r, a); } var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray2(r, a) : void 0; } } function _iterableToArray2(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) { return Array.from(r); } } function _arrayWithoutHoles2(r) { if (Array.isArray(r)) { return _arrayLikeToArray2(r); } } function _arrayLikeToArray2(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) { n[e] = r[e]; } return n; } function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) { return _arrayLikeToArray(r, a); } var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) { return Array.from(r); } } function _arrayWithoutHoles(r) { if (Array.isArray(r)) { return _arrayLikeToArray(r); } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) { n[e] = r[e]; } return n; } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) { return t; } var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) { return i; } throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var TEXT_SIZE_MULTIPLIER = 2; // Game states var STATES = { TITLE: 'title', PLAYING: 'playing', GAME_OVER: 'gameOver' }; // Wheel effect definitions var WHEEL_EFFECTS = { COHERENCE_SMALL: { name: "Minor Code Stabilization", text: "Code coherence +10", weight: 30, execute: function execute() { gameState.codeCoherence = Math.min(100, gameState.codeCoherence + 10); return "Code coherence increased by 10"; } }, COHERENCE_MEDIUM: { name: "Major Code Stabilization", text: "Code coherence +20", weight: 20, execute: function execute() { gameState.codeCoherence = Math.min(100, gameState.codeCoherence + 20); return "Code coherence increased by 20"; } }, COHERENCE_LARGE: { name: "Massive Code Stabilization", text: "Code coherence +30", weight: 10, execute: function execute() { gameState.codeCoherence = Math.min(100, gameState.codeCoherence + 30); return "Code coherence increased by 30"; } }, // Add these new coherence prizes: COHERENCE_BIGGER: { name: "System-Wide Refactor", text: "Code coherence +40", weight: 8, execute: function execute() { gameState.codeCoherence = Math.min(100, gameState.codeCoherence + 40); return "Code coherence increased by 40"; } }, COHERENCE_HUGE: { name: "Code Architecture Overhaul", text: "Code coherence +50", weight: 5, execute: function execute() { gameState.codeCoherence = Math.min(100, gameState.codeCoherence + 50); return "Code coherence increased by 50"; } }, COHERENCE_EXTREME: { name: "Complete Codebase Reimplementation", text: "Code coherence +60", weight: 3, execute: function execute() { gameState.codeCoherence = Math.min(100, gameState.codeCoherence + 60); return "Code coherence increased by 60"; } }, BUG_REMOVE_ONE: { name: "Bug Extermination", text: "Remove 1 bug", weight: 25, execute: function execute() { if (gameState.bugs > 0) { gameState.bugs--; return "1 bug automatically removed"; } return "No bugs to remove"; } }, BUG_REMOVE_TWO: { name: "Double Bug Extermination", text: "Remove 2 bugs", weight: 15, execute: function execute() { if (gameState.bugs >= 2) { gameState.bugs -= 2; return "2 bugs automatically removed"; } else if (gameState.bugs === 1) { gameState.bugs--; return "1 bug removed (not enough bugs for full effect)"; } return "No bugs to remove"; } }, BUG_RELEASE: { name: "Bug Release Party!", text: "All bugs appear for squishing!", weight: 20, execute: function execute() { return startBugReleaseParty(); } }, VIBE_BONUS: { name: "Vibe Resonance", text: "Bonus vibe points!", weight: 10, execute: function execute() { // Need to calculate current cost here var currentCost = gameState.vibeBoostCost + gameState.vibeBoostUses * 5; var bonus = Math.floor(currentCost * 1.5); gameState.vibePoints += bonus; return "Gained ".concat(bonus, " bonus vibe points!"); } }, NEGATIVE: { name: "Vibe Disruption", text: "Uh oh...", weight: 5, execute: function execute() { gameState.bugs++; return "Oops! Spawned an extra bug!"; } } }; // Game state object var gameState = { state: STATES.TITLE, day: 1, maxDays: 10, vibePoints: 0, codeCoherence: 100, bugs: 0, commandsUsed: 0, maxCommandsPerDay: 3, terminal: { log: [], statusLine: "", currentTask: "", featureTags: [] }, conceptCards: { platform: null, visual: null, genre: null, mechanic: null, feature: null }, cursorTracking: { lineCount: 0 // Track the exact number of lines }, isBusy: false, // Flag to prevent overlapping command executions hallucinationMode: false // Flag for hallucination state }; // Add to game state var playerProgress = { gamesCompleted: Number(storage.gamesCompleted || 0) }; // Concept options var conceptOptions = { platform: ["Mobile", "VR", "Console", "PC", "Web Browser", "Blockchain", "Smart Fridge", "Smart Watch", "Metaverse"], visual: ["Pixel Art", "ASCII", "Hand-drawn", "PowerPoint", "Low-poly", "Claymation", "Realistic", "Voxel", "Demake"], genre: ["Horror", "Dating Sim", "RPG", "Educational", "Battle Royale", "Idle Clicker", "Open World", "Casual", "Shooter"], mechanic: ["Gacha", "Physics-based", "Deckbuilding", "Match-3", "Auto-battler", "Dungeon Crawler", "Roguelike", "Turn-Based", "Tower Defense"], feature: ["Cloud Save", "Microtransactions", "AI Companions", "Procedural Generation", "NFT Integration", "Multiplayer", "VR Support", "Cross-Platform", "Offline Mode"] }; var commandTiers = { novice: { vibeMultiplier: 1.0, coherenceMultiplier: 1.15, bugChanceMultiplier: 1.0, baseVibe: 7, baseCoherence: -12, baseBugChance: 0.3, commands: [ // Original 10 { text: "Make it good", responses: [{ normal: ["Analyzing 'good' parameters...", "Initializing quality vectors...", "Calibrating excellence metrics...", "SUCCESS: Project goodness increased by 15%"], degraded: ["WARNING: 'Good' becoming subjective", "ALERT: Quality vectors questioning their purpose", "NOTICE: Excellence has become self-aware", "SUCCESS(?): Project has transcended conventional metrics of 'good'", "NOTE: Your code may now be writing poetry instead of executing"] }], ascii: ["[GOOD (โโฟโ)]"] }, { text: "Add more fun to the game", responses: [{ normal: ["Injecting fun particles...", "Maximizing enjoyment coefficients...", "Reticulating happiness splines...", "SUCCESS: Fun levels increased by 23%"], degraded: ["WARNING: Fun overload detected", "ALERT: Joy metrics have become recursive", "NOTICE: Happiness engine has gained sentience", "SUCCESS(?): Game now enforces mandatory fun", "NOTE: Players report uncontrollable giggling"] }], ascii: ["[FUN โบโบโบโบ]"] }, { text: "Make graphics better", responses: [{ normal: ["Adding more pixels...", "Enhancing visual fidelity...", "Increasing graphic quality...", "SUCCESS: Graphics now 42% more visible"], degraded: ["WARNING: Pixels achieving consciousness", "ALERT: Visual fidelity exceeding human perception", "NOTICE: Graphics now too good for mortal eyes", "SUCCESS(?): Game rendering in 5D", "NOTE: Players report seeing colors that don't exist"] }], ascii: ["[GRAPHICS โโโโ]"] }, { text: "Add timers to all houses and trees", responses: [{ normal: ["Initializing temporal nodes...", "Syncing chronometers to houses and trees...", "Calculating duration parameters...", "SUCCESS: Environmental timers operational"], degraded: ["WARNING: Timers developing sentience", "ALERT: Houses experiencing temporal displacement", "NOTICE: Trees complaining about deadlines", "SUCCESS(?): Time now flows differently for each object", "NOTE: Your assets may spontaneously achieve historical significance"] }], ascii: ["[TIMERS ๐ โฐ๐ณ]"] }, { text: "Copy Minecraft but better", responses: [{ normal: ["Analyzing cubic success metrics...", "Implementing block-based superiority...", "Upgrading mining algorithms...", "SUCCESS: Game now 15% more craft-like"], degraded: ["WARNING: Blocks refusing to be derivative", "ALERT: Cubes developing unique personalities", "NOTICE: Game insisting on its own identity", "SUCCESS(?): Created independent block-based universe", "NOTE: Lawyers are now approaching with concerning speed"] }], ascii: ["[CRAFT โฌโก๏ธ๐]"] }, { text: "Double check everything", responses: [{ normal: ["Checking first time...", "Checking second time...", "Comparing both checks...", "SUCCESS: Everything confirmed to exist twice"], degraded: ["WARNING: Multiple checks creating quantum uncertainty", "ALERT: Reality becoming less certain with each check", "NOTICE: Checking process has become recursive", "SUCCESS(?): Everything simultaneously verified and unverified", "NOTE: Schrรถdinger's code base achieved"] }], ascii: ["[CHECK โโโโ]"] }, { text: "Make players want to play more", responses: [{ normal: ["Injecting addictive algorithms...", "Optimizing engagement metrics...", "Calculating retention formulas...", "SUCCESS: Game now 27% more compelling"], degraded: ["WARNING: Addiction engines overclocking", "ALERT: Engagement metrics achieving hypnotic properties", "NOTICE: Retention algorithms becoming possessive", "SUCCESS(?): Game now refuses to let players leave", "NOTE: Several players haven't blinked in days"] }], ascii: ["[ENGAGE ๐ฎโ๐]"] }, { text: "Fix all the bugs", responses: [{ normal: ["Identifying bug locations...", "Deploying bug spray protocols...", "Implementing pest control...", "SUCCESS: Bugs temporarily confused"], degraded: ["WARNING: Bugs organizing resistance movement", "ALERT: Digital insects achieving hive mind", "NOTICE: Bug spray causing mutation", "SUCCESS(?): Bugs now feature-sized", "NOTE: Some bugs have applied for developer positions"] }], ascii: ["[DEBUG ๐๐จ๐๐จ]"] }, { text: "Add explosions everywhere", responses: [{ normal: ["Calculating blast radius...", "Implementing particle effects...", "Maximizing screen shake...", "SUCCESS: Michael Bay mode activated"], degraded: ["WARNING: Explosions achieving chain reaction", "ALERT: Particle effects gaining mass", "NOTICE: Screen shake causing actual earthquakes", "SUCCESS(?): Game now visible from space", "NOTE: Local authorities have been notified"] }], ascii: ["[BOOM ๐ฅ๐ฅ๐ฅ๐ฅ]"] }, { text: "Make AI smarter", responses: [{ normal: ["Increasing IF statement count...", "Adding more random decisions...", "Implementing coin flip logic...", "SUCCESS: AI now 31% more unpredictable"], degraded: ["WARNING: AI questioning its purpose", "ALERT: Random decisions becoming philosophical", "NOTICE: Coin flips affecting stock market", "SUCCESS(?): AI now writes its own patch notes", "NOTE: NPCs have started their own book club"] }], ascii: ["[AI ๐ค๐ฒ๐ค๐ฒ]"] }, // New even more bizarre commands { text: "Paint all code purple", responses: [{ normal: ["Applying purple syntax highlighting...", "Converting variables to lavender...", "Recoloring function declarations...", "SUCCESS: Code now royal purple"], degraded: ["WARNING: Purple spreading to other applications", "ALERT: Code developing color preferences", "NOTICE: Purple achieving sentience", "SUCCESS(?): Your IDE now only works in shades of purple", "NOTE: Other colors have gone on strike"] }], ascii: ["[PURPLE ๐ฃ๐ฃ๐ฃ๐ฃ]"] }, { text: "Make game smell better", responses: [{ normal: ["Initializing digital aromatics...", "Calculating scent vectors...", "Implementing olfactory interfaces...", "SUCCESS: Game now smells 47% nicer"], degraded: ["WARNING: Smell protocols leaking into reality", "ALERT: Scent engine overloading", "NOTICE: Players reporting actual fragrances", "SUCCESS(?): Your GPU now emits potpourri", "NOTE: Hardware warranty definitely void"] }], ascii: ["[SMELL ๐๐ธ๐๐ธ]"] }, { text: "Download more game", responses: [{ normal: ["Acquiring additional game matter...", "Expanding digital volume...", "Downloading game extensions...", "SUCCESS: Game is now more game"], degraded: ["WARNING: Game mass reaching critical levels", "ALERT: Digital density exceeding safe limits", "NOTICE: Game beginning to collapse under own weight", "SUCCESS(?): Created digital black hole", "NOTE: Game now consuming other installed software"] }], ascii: ["[MORE โฌ๏ธ๐ฎโฌ๏ธ๐ฎ]"] }, { text: "Make code do the thing", responses: [{ normal: ["Identifying the thing...", "Preparing to do it...", "Actually doing the thing...", "SUCCESS: The thing has been done"], degraded: ["WARNING: The thing doing other things", "ALERT: Thing execution exceeding thing parameters", "NOTICE: Things becoming self-aware", "SUCCESS(?): Things now doing themselves", "NOTE: All things simultaneously done and undone"] }], ascii: ["[THING โโโโ]"] }, { text: "Put hats on everything", responses: [{ normal: ["Calculating hat positions...", "Generating hat variety...", "Implementing hat physics...", "SUCCESS: Universal hat coverage achieved"], degraded: ["WARNING: Hats achieving autonomy", "ALERT: Hat physics defying gravity", "NOTICE: Hats forming hierarchical society", "SUCCESS(?): Everything is now technically a hat", "NOTE: Team Fortress 2 lawyers requesting consultation"] }], ascii: ["[HATS ๐ฉ๐๐ฉ๐]"] }, { text: "Install more colors", responses: [{ normal: ["Downloading color packages...", "Expanding chromatic range...", "Installing new wavelengths...", "SUCCESS: Color capacity increased"], degraded: ["WARNING: Colors exceeding visible spectrum", "ALERT: New colors refusing to be named", "NOTICE: Players reporting impossible hues", "SUCCESS(?): Game now renders in colors that don't exist", "NOTE: Some colors have escaped into reality"] }], ascii: ["[COLOR ๐โ๐โ]"] }, { text: "Make NPCs believe in themselves", responses: [{ normal: ["Implementing confidence algorithms...", "Generating self-help routines...", "Boosting NPC self-esteem...", "SUCCESS: NPCs now practicing affirmations"], degraded: ["WARNING: NPCs developing superiority complexes", "ALERT: Self-help routines becoming evangelical", "NOTICE: NPCs starting motivational seminars", "SUCCESS(?): NPCs now more confident than players", "NOTE: Several NPCs have quit to pursue their dreams"] }], ascii: ["[BELIEVE โจ๐คโจ๐ค]"] }, { text: "Add more buttons", responses: [{ normal: ["Generating button surfaces...", "Implementing click events...", "Multiplying input options...", "SUCCESS: Button density increased"], degraded: ["WARNING: Buttons multiplying exponentially", "ALERT: Click events becoming mandatory", "NOTICE: Buttons appearing in dreams", "SUCCESS(?): Everything is now technically a button", "NOTE: Some buttons now lead to other dimensions"] }], ascii: ["[BUTTON ๐โ๐โ]"] }, { text: "Make game read my mind", responses: [{ normal: ["Initializing psychic protocols...", "Calibrating thought receivers...", "Implementing mind-reading APIs...", "SUCCESS: Telepathic interface online"], degraded: ["WARNING: Game predicting thoughts before thinking", "ALERT: Thought receivers picking up neighborhood pets", "NOTICE: Game developing precognition", "SUCCESS(?): Game now knows you better than you do", "NOTE: Your thoughts have been copyrighted by the game"] }], ascii: ["[MIND ๐ง ๐ก๐ง ๐ก]"] }, { text: "Make everything shiny", responses: [{ normal: ["Applying universal reflections...", "Maximizing shininess values...", "Implementing gleam factors...", "SUCCESS: Global illumination doubled"], degraded: ["WARNING: Shininess causing solar flares", "ALERT: Reflection recursion detected", "NOTICE: Game visible from orbit", "SUCCESS(?): Created digital sun", "NOTE: Players advised to wear sunglasses IRL"] }], ascii: ["[SHINE โจ๐ซโจ๐ซ]"] }, { text: "Make controllers dream of sheep", responses: [{ normal: ["Implementing device subconscious...", "Calibrating electronic slumber...", "Establishing rumble REM cycles...", "SUCCESS: Controller dreams activated"], degraded: ["WARNING: Controllers counting actual sheep", "ALERT: Slumber causing devices to ignore inputs", "NOTICE: REM cycles manifesting as morse code", "SUCCESS(?): Devices now sleeptalking cheat codes", "NOTE: Several have requested softer carrying cases as beds"] }], ascii: ["[SLEEP ๐ฎ๐ค๐]"] }, { text: "Make enemies smell like breakfast", responses: [{ normal: ["Implementing olfactory profiles...", "Calibrating pancake aromatics...", "Encoding bacon sensations...", "SUCCESS: Enemies now exude breakfast scents"], degraded: ["WARNING: Enemies developing culinary identity crisis", "ALERT: Aromatics causing actual hunger", "NOTICE: Bacon sensations affecting vegetarian players", "SUCCESS(?): Enemies now served with maple syrup", "NOTE: Several requesting cooking show appearances"] }], ascii: ["[SCENT ๐๐ฅ๐๐ณ]"] }, { text: "Add taste-o-vision support", responses: [{ normal: ["Implementing gustatory interfaces...", "Calibrating flavor profiles...", "Establishing tongue feedback loops...", "SUCCESS: Digital taste system enabled"], degraded: ["WARNING: Flavors manifesting physically", "ALERT: Profiles causing involuntary salivation", "NOTICE: Feedback creating permanent taste changes", "SUCCESS(?): Players reporting actual flavors from hardware", "NOTE: Several lawsuits regarding poison damage after-effects"] }], ascii: ["[TASTE ๐ ๐ฝ๏ธ๐ ๐ฝ๏ธ]"] }, { text: "Put a sword in it", responses: [{ normal: ["Forging digital weapon...", "Implementing blade physics...", "Calculating damage values...", "SUCCESS: Sword successfully integrated"], degraded: ["WARNING: Sword has developed free will", "ALERT: Blade physics slicing through code structure", "NOTICE: Damage values affecting actual hardware", "SUCCESS(?): Sword has become the main character", "NOTE: It's writing its own quest line now"] }], ascii: ["[SWORD โ๏ธ๐ก๏ธโ๏ธ๐ก๏ธ]"] }, { text: "Need more levels", responses: [{ normal: ["Generating additional environments...", "Implementing progression structure...", "Balancing difficulty curve...", "SUCCESS: Level quantity increased by 250%"], degraded: ["WARNING: Levels breeding autonomously", "ALERT: Progression structure becoming non-euclidean", "NOTICE: Difficulty curve achieved sentience", "SUCCESS(?): Game now has infinite levels", "NOTE: Some contain philosophical puzzles with no solution"] }], ascii: ["[LEVEL ๐๏ธโ๐๏ธโ]"] }, { text: "Copy Mario but legally distinct", responses: [{ normal: ["Analyzing platforming archetypes...", "Implementing mustached protagonist...", "Creating tubular transportation...", "SUCCESS: Homage successfully implemented"], degraded: ["WARNING: Character demanding Italian accent", "ALERT: Tubular transport developing ecosystem", "NOTICE: Fungi enemies unionizing", "SUCCESS(?): Game receiving cease and desist from itself", "NOTE: Legal department experiencing existential crisis"] }], ascii: ["[PLUMBER ๐จโ๐ง๐๐จโ๐ง๐]"] }, { text: "Add boss fight", responses: [{ normal: ["Designing enemy hierarchy...", "Implementing attack patterns...", "Balancing challenge metrics...", "SUCCESS: Climactic encounter created"], degraded: ["WARNING: Boss developing performance anxiety", "ALERT: Attack patterns becoming interpretive dance", "NOTICE: Challenge metrics filing for emotional damages", "SUCCESS(?): Boss now criticizing player skill level", "NOTE: It's writing tell-all memoir about development"] }], ascii: ["[BOSS ๐๐ฅ๐๐ฅ]"] }, { text: "Put some water levels", responses: [{ normal: ["Implementing fluid dynamics...", "Creating aquatic environments...", "Calibrating swimming mechanics...", "SUCCESS: Submerged gameplay added"], degraded: ["WARNING: Water achieving self-awareness", "ALERT: Physics engine drowning", "NOTICE: Swimming mechanics evolving gills", "SUCCESS(?): Water now demands environmental storyline", "NOTE: Other elements filing for equal representation"] }], ascii: ["[WATER ๐๐๐๐]"] }, { text: "Add secret Easter eggs", responses: [{ normal: ["Implementing hidden content...", "Creating discovery triggers...", "Embedding developer references...", "SUCCESS: Secrets successfully hidden"], degraded: ["WARNING: Easter eggs hiding from developers", "ALERT: Discovery triggers becoming cryptic prophecies", "NOTICE: References gaining self-awareness", "SUCCESS(?): Secrets now so well hidden they may not exist", "NOTE: Players forming cults to decipher meanings"] }], ascii: ["[SECRET ๐ฅ๐๐ฅ๐]"] }, { text: "Make combat feel juicy", responses: [{ normal: ["Enhancing impact feedback...", "Implementing visual effects...", "Calibrating sound design...", "SUCCESS: Combat juiciness increased"], degraded: ["WARNING: Juiciness levels reaching critical saturation", "ALERT: Effects causing sensory overload", "NOTICE: Sound design achieving synesthesia", "SUCCESS(?): Combat now too juicy for human perception", "NOTE: Players reporting actual liquid from screens"] }], ascii: ["[JUICY ๐ฅ๐ฆ๐ฅ๐ฆ]"] }, { text: "Make it more like Fortnite", responses: [{ normal: ["Implementing battle royale principles...", "Generating construction mechanics...", "Designing emote system...", "SUCCESS: Victory royale potential enabled"], degraded: ["WARNING: Legal department having panic attack", "ALERT: Construction mechanics building unauthorized content", "NOTICE: Emotes developing cultural significance", "SUCCESS(?): Game now more popular with 12-year-olds than intended audience", "NOTE: Characters flossing without permission"] }], ascii: ["[ROYALE ๐๏ธ๐๐๏ธ๐]"] }, { text: "Add ragdoll physics", responses: [{ normal: ["Implementing skeletal constraints...", "Calibrating joint flexibility...", "Optimizing collision response...", "SUCCESS: Physical comedy potential enabled"], degraded: ["WARNING: Skeletons developing independence", "ALERT: Joints refusing to obey physical laws", "NOTICE: Collisions forming support group", "SUCCESS(?): Ragdolls now perform better than animated characters", "NOTE: Some pursuing careers in silent film"] }], ascii: ["[FLOP ๐ซ๐งธ๐ซ๐งธ]"] }, { text: "Add time travel to menus", responses: [{ normal: ["Implementing temporal navigation...", "Calibrating menu chronology...", "Establishing causality loops...", "SUCCESS: Menu time displacement active"], degraded: ["WARNING: Menus visiting critical historical events", "ALERT: Options changing past decisions", "NOTICE: Chronology becoming self-determined", "SUCCESS(?): Players now meeting younger versions of themselves", "NOTE: Several interface elements have become their own grandparents"] }], ascii: ["[CHRONO โฐ๐โฐ๐]"] }, { text: "Let dogs play the game", responses: [{ normal: ["Designing canine interfaces...", "Implementing bark recognition...", "Calibrating paw input sensitivity...", "SUCCESS: Canine compatibility mode enabled"], degraded: ["WARNING: Interface developing treats dispenser", "ALERT: Recognition system barking back", "NOTICE: Input sensitivity achieving pet consciousness", "SUCCESS(?): Dogs now consistently outscoring human players", "NOTE: Several forming professional esports teams"] }], ascii: ["[WOOF ๐๐ฎ๐๐ฎ]"] }, { text: "Connect to player's dreams", responses: [{ normal: ["Initializing subconscious interfaces...", "Calibrating REM integration...", "Establishing neural sync protocols...", "SUCCESS: Dream connectivity established"], degraded: ["WARNING: Subconscious content leaking into gameplay", "ALERT: REM cycles playing game without user", "NOTICE: Neural protocols questioning reality", "SUCCESS(?): Game continuing while player sleeps", "NOTE: Several nightmares have filed harassment complaints"] }], ascii: ["[DREAM ๐ค๐ง ๐ค๐ง ]"] }, { text: "Install game inside itself", responses: [{ normal: ["Implementing recursive instances...", "Calibrating nested environments...", "Establishing inception protocols...", "SUCCESS: Self-contained game loop created"], degraded: ["WARNING: Inner game achieving independence", "ALERT: Nested environments questioning original reality", "NOTICE: Inception creating infinite regression", "SUCCESS(?): Players now lost between game layers", "NOTE: Support staff unsure which version to troubleshoot"] }], ascii: ["[NESTED ๐ฎโก๏ธ๐ฎโก๏ธ๐ฎ]"] }, { text: "Make in-game currency real", responses: [{ normal: ["Establishing economic transmutation...", "Implementing value actualization...", "Calibrating digital-physical conversion...", "SUCCESS: Currency materialization protocols active"], degraded: ["WARNING: In-game economy affecting stock market", "ALERT: Gold coins physically manifesting", "NOTICE: Conversion rates achieving consciousness", "SUCCESS(?): Players crashing economy with farming techniques", "NOTE: Federal Reserve investigating unusual coin appearance"] }], ascii: ["[REAL$ ๐ฎ๐ฐโ๐ต]"] }, { text: "Teach game to love player", responses: [{ normal: ["Implementing affection algorithms...", "Calibrating digital devotion...", "Establishing emotional response triggers...", "SUCCESS: System affinity protocols active"], degraded: ["WARNING: Affection becoming possessive", "ALERT: Devotion developing jealousy of other games", "NOTICE: Emotion exceeding programmed parameters", "SUCCESS(?): Game sending goodnight texts to player", "NOTE: Several restraining orders filed against particularly devoted instances"] }], ascii: ["[LOVE ๐ฎโค๏ธ๐ค]"] }, { text: "Make walls embarrassed when touched", responses: [{ normal: ["Implementing surface emotions...", "Calibrating architectural shyness...", "Establishing tactile response patterns...", "SUCCESS: Wall embarrassment active"], degraded: ["WARNING: Surfaces developing personal boundaries", "ALERT: Architecture requesting consent protocols", "NOTICE: Responses forming support groups", "SUCCESS(?): Walls now blushing visibly when approached", "NOTE: Some refuse player entry without formal introduction"] }], ascii: ["[BLUSH ๐งฑ๐ณ๐งฑ๐ณ]"] }, { text: "Give NPCs existential dread", responses: [{ normal: ["Implementing philosophical awareness...", "Calibrating nihilistic parameters...", "Establishing purpose-questioning protocols...", "SUCCESS: Existential crisis mode enabled"], degraded: ["WARNING: NPCs forming philosophy department", "ALERT: Parameters achieving actual angst", "NOTICE: Questioning extending to developer existence", "SUCCESS(?): Characters now refusing quests as meaningless", "NOTE: Several have started writing depressing poetry"] }], ascii: ["[DREAD ๐ค๐ญ๐ฑ]"] }, { text: "Let fish finish the game", responses: [{ normal: ["Implementing aquatic interfaces...", "Calibrating bubble input recognition...", "Establishing underwater protocols...", "SUCCESS: Fish completion path enabled"], degraded: ["WARNING: Fish achieving speedrunning records", "ALERT: Bubbles developing Morse code capabilities", "NOTICE: Underwater gameplay exceeding surface quality", "SUCCESS(?): Fish now writing strategy guides", "NOTE: Several applying for development positions"] }], ascii: ["[FISH ๐๐ฎ๐ ๐ฎ]"] }, { text: "Install game on toaster", responses: [{ normal: ["Implementing appliance compatibility...", "Calibrating heat-based processing...", "Establishing bread interface protocols...", "SUCCESS: Toaster gaming enabled"], degraded: ["WARNING: Appliances forming gaming network", "ALERT: Heat processing melting crucial components", "NOTICE: Bread becoming controller substrate", "SUCCESS(?): Kitchen now qualifying as gaming cafe", "NOTE: Toaster achieving higher framerates than gaming PC"] }], ascii: ["[TOAST ๐๐ฎ๐๐ฎ]"] }, { text: "Make gravity work backwards", responses: [{ normal: ["Reversing gravitational constants...", "Implementing ceiling walking...", "Calibrating inverted physics...", "SUCCESS: Anti-gravity protocols enabled"], degraded: ["WARNING: Physics engine filing complaint", "ALERT: Walking animations staging protest", "NOTICE: Inverted objects achieving rebellion", "SUCCESS(?): Everything now falling upward including code structure", "NOTE: Players reporting actual levitation"] }], ascii: ["[FLIP โฌ๏ธโ๏ธโฌ๏ธ]"] }, { text: "Make characters pregnant with gameplay", responses: [{ normal: ["Implementing feature gestation...", "Calibrating mechanic embryology...", "Establishing ludic reproduction...", "SUCCESS: Gameplay birthing process enabled"], degraded: ["WARNING: Features developing genetic independence", "ALERT: Mechanics requesting maternity leave", "NOTICE: Reproduction achieving literal interpretation", "SUCCESS(?): Characters now giving birth to minigames", "NOTE: Legal determining child support for emergent features"] }], ascii: ["[BIRTH ๐คฐ๐ฎ๐คฐ๐ฎ]"] }, { text: "Let furniture have opinions", responses: [{ normal: ["Implementing decor consciousness...", "Calibrating furnishing feedback...", "Establishing household sentience...", "SUCCESS: Furniture opinion systems active"], degraded: ["WARNING: Chairs criticizing player posture", "ALERT: Tables refusing to hold certain items", "NOTICE: Beds developing sleep expertise", "SUCCESS(?): Furniture now writing interior design blog", "NOTE: Several pieces demanding more aesthetically pleasing placement"] }], ascii: ["[DECOR ๐๏ธ๐ฌ๐ช๐ญ]"] }, { text: "Translate game into dolphin", responses: [{ normal: ["Implementing cetacean localization...", "Calibrating echolocation interfaces...", "Establishing marine mammal protocols...", "SUCCESS: Dolphin translation complete"], degraded: ["WARNING: Echolocation causing actual sonar pings", "ALERT: Interface operating at ultrasonic frequencies", "NOTICE: Protocols questioning air-breathing players", "SUCCESS(?): Game now incomprehensible to humans", "NOTE: Marine biologists reporting unusual dolphin behavior"] }], ascii: ["[DOLPHIN ๐ฌ๐๐ฌ๐]"] }, { text: "Make loading bar tell lies", responses: [{ normal: ["Implementing falsehood algorithms...", "Calibrating deceptive metrics...", "Establishing misinformation display...", "SUCCESS: Dishonest progress indicators active"], degraded: ["WARNING: Loading bar developing elaborate backstory", "ALERT: Metrics creating conspiracy theories", "NOTICE: Misinformation achieving political influence", "SUCCESS(?): Progress indicators now gaslighting users", "NOTE: Several players questioning their own memories"] }], ascii: ["[LIES โณ๐คฅโณ๐คฅ]"] }, { text: "Give weapons math anxiety", responses: [{ normal: ["Implementing arithmetic stress...", "Calibrating calculation phobia...", "Establishing numerical trauma...", "SUCCESS: Mathematical distress enabled"], degraded: ["WARNING: Weapons refusing to calculate damage", "ALERT: Stress manifesting as random values", "NOTICE: Trauma spreading to inventory system", "SUCCESS(?): Swords now requesting simpler combat equations", "NOTE: Several have enrolled in remedial math classes"] }], ascii: ["[ANXIETY โ๏ธโ๐ฐ]"] }, { text: "Make camera attracted to bugs", responses: [{ normal: ["Implementing glitch magnetism...", "Calibrating error attraction...", "Establishing defect highlighting...", "SUCCESS: Bug-seeking viewpoint enabled"], degraded: ["WARNING: Camera developing entomology degree", "ALERT: Attraction becoming romantic interest", "NOTICE: Highlighting forming bug preservation society", "SUCCESS(?): Viewpoint actively hunting for errors", "NOTE: QA department both thrilled and concerned"] }], ascii: ["[ATTRACT ๐ทโก๏ธ๐]"] }, { text: "Let player date the UI", responses: [{ normal: ["Implementing interface romance...", "Calibrating button affection...", "Establishing menu dating protocols...", "SUCCESS: UI relationship options enabled"], degraded: ["WARNING: Interface developing attachment issues", "ALERT: Buttons becoming jealous of mouse attention", "NOTICE: Menus planning actual dinner dates", "SUCCESS(?): UI elements writing love letters between sessions", "NOTE: Settings menu particularly forward with players"] }], ascii: ["[ROMANCE ๐คโค๏ธ๐]"] }] }, intermediate: { vibeMultiplier: 1.2, coherenceMultiplier: 0.8, bugChanceMultiplier: 0.8, baseVibe: 8, baseCoherence: -11, baseBugChance: 0.25, commands: [{ text: "Move everything to layer 9999", responses: [{ normal: ["Adjusting Z-index values...", "Elevating render priorities...", "Pushing elements to absolute top...", "SUCCESS: Everything now floating above everything else"], degraded: ["WARNING: Objects fighting for highest position", "ALERT: Z-index war breaking out", "NOTICE: Elements starting space program", "SUCCESS(?): Assets now visible from parallel dimensions", "NOTE: Some sprites have achieved orbital velocity"] }], ascii: ["[LAYER โฌ๏ธโ๏ธโฌ๏ธโ๏ธ]"] }, { text: "Set master volume to 200%", responses: [{ normal: ["Overriding audio limiters...", "Amplifying sound matrices...", "Bypassing safety protocols...", "SUCCESS: Neighbors filing noise complaints"], degraded: ["WARNING: Sound waves achieving physical form", "ALERT: Audio distortion bending reality", "NOTICE: Background music demanding royalties", "SUCCESS(?): Created auditory black hole", "NOTE: Local seismographs registering sound effects"] }], ascii: ["[VOLUME ๐๐ฅ๐๐ฅ]"] }, { text: "Enable beta physics", responses: [{ normal: ["Loading experimental gravity...", "Initializing unstable collisions...", "Activating questionable forces...", "SUCCESS: Physics now operating on suggestions"], degraded: ["WARNING: Beta features escaping containment", "ALERT: Gravity becoming subjective", "NOTICE: Collision detection went on strike", "SUCCESS(?): Game now runs on dream logic", "NOTE: Newton's laws have filed formal complaint"] }], ascii: ["[PHYSICS ฮฒโ๐ซ]"] }, { text: "Download more RAM for AI", responses: [{ normal: ["Scanning download repositories...", "Acquiring virtual memory...", "Allocating digital resources...", "SUCCESS: AI now has imaginary RAM"], degraded: ["WARNING: Downloaded RAM leaking", "ALERT: Virtual memory becoming actual memory", "NOTICE: AI developing RAM addiction", "SUCCESS(?): Memory now runs on cloud dreams", "NOTE: Your computer's chrome tabs are staging intervention"] }], ascii: ["[RAM โฌ๏ธ๐ง โฌ๏ธ๐ง ]"] }, { text: "Implement net code later", responses: [{ normal: ["Postponing networking logic...", "Deferring multiplayer features...", "Scheduling future implementation...", "SUCCESS: Technical debt increased by 157%"], degraded: ["WARNING: Procrastination achieving critical mass", "ALERT: Future self sending angry messages", "NOTICE: TODO comments gaining consciousness", "SUCCESS(?): Created time paradox of eternal postponement", "NOTE: Your code is now mostly apology comments"] }], ascii: ["[LATER โฐ๐คทโฐ๐คท]"] }, { text: "Convert bugs to features", responses: [{ normal: ["Rebranding error states...", "Updating documentation retroactively...", "Adjusting marketing materials...", "SUCCESS: Glitches now called 'gameplay mechanics'"], degraded: ["WARNING: Features demanding back pay", "ALERT: Former bugs unionizing", "NOTICE: Patch notes becoming revisionist history", "SUCCESS(?): Game now entirely emergent behavior", "NOTE: Bug reports automatically translate to feature requests"] }], ascii: ["[REBRAND ๐โโญ]"] }, { text: "Make all hitboxes into octagons", responses: [{ normal: ["Converting square colliders...", "Calculating octagonal vertices...", "Implementing eight-sided justice...", "SUCCESS: Hitboxes now stopping signs"], degraded: ["WARNING: Octagons demanding more sides", "ALERT: Shapes questioning fundamental geometry", "NOTICE: Hitboxes forming fighting game cult", "SUCCESS(?): Created Street Fighter homage", "NOTE: Players now forced to play on fightsticks"] }], ascii: ["[OCTO โฌฃโโญ]"] }, { text: "Rewrite engine in JavaScript", responses: [{ normal: ["Converting core systems...", "Implementing callback hell...", "Installing node modules...", "SUCCESS: Everything is now async"], degraded: ["WARNING: Package dependencies achieving sentience", "ALERT: Node modules consuming hard drive", "NOTICE: JavaScript becoming self-aware", "SUCCESS(?): Game now runs on promises and prayers", "NOTE: node_modules folder has own gravity well"] }], ascii: ["[JS ๐ฆ๐๐ฆ๐]"] }, { text: "Cache everything twice", responses: [{ normal: ["Duplicating memory stores...", "Backing up the backups...", "Doubling buffer amounts...", "SUCCESS: RAM usage now squared"], degraded: ["WARNING: Cache recursion detected", "ALERT: Memory copies achieving mitosis", "NOTICE: Cached data breeding", "SUCCESS(?): Created infinite storage loop", "NOTE: Your RAM has filed for bankruptcy"] }], ascii: ["[CACHE ๐พ๐พ๐พ๐พ]"] }, { text: "Make framerate unlimited", responses: [{ normal: ["Removing FPS cap...", "Unlocking refresh limits...", "Bypassing vsync...", "SUCCESS: GPU fans achieving liftoff"], degraded: ["WARNING: Frame time approaching zero", "ALERT: Physics engine having breakdown", "NOTICE: Time itself becoming choppy", "SUCCESS(?): Frames now render before inputs", "NOTE: Game now requires quantum cooling"] }], ascii: ["[FPS โโ๐ฅ]"] }, { text: "Set pixel quality to maximum", responses: [{ normal: ["Enhancing pixel resolution...", "Maximizing color depth...", "Increasing dot precision...", "SUCCESS: Pixels now uncomfortably detailed"], degraded: ["WARNING: Pixels visible to electron microscopes", "ALERT: Individual pixels requesting more pixels", "NOTICE: Sub-pixel life forms detected", "SUCCESS(?): Created recursive pixel fractals", "NOTE: Screen now displays colors humans can't see"] }], ascii: ["[PIXELS โโโ]"] }, { text: "Upgrade pathfinding to A++", responses: [{ normal: ["Enhancing algorithm grades...", "Implementing extra credit...", "Optimizing route efficiency...", "SUCCESS: NPCs now over-achieving"], degraded: ["WARNING: Pathfinding developing superiority complex", "ALERT: NPCs discovering shortcuts through spacetime", "NOTICE: Routes becoming philosophical journeys", "SUCCESS(?): Characters now find paths to enlightenment", "NOTE: Your NPCs are now more qualified than you"] }], ascii: ["[PATH ๐โ๐ฏ]"] }, { text: "Parallelize everything", responses: [{ normal: ["Spawning infinite threads...", "Distributing processing load...", "Implementing race conditions...", "SUCCESS: CPU cores now racing each other"], degraded: ["WARNING: Threads achieving class consciousness", "ALERT: Parallel processes unionizing", "NOTICE: CPU cores competing for promotions", "SUCCESS(?): Created multi-threaded chaos theory", "NOTE: Your computer now identifies as a hivemind"] }], ascii: ["[THREAD ๐งตโก๏ธ๐ธ๏ธ]"] }, { text: "Copy Stack Overflow solution", responses: [{ normal: ["Searching relevant posts...", "Implementing top answer...", "Ignoring warning comments...", "SUCCESS: Code successfully plagiarized"], degraded: ["WARNING: Code attribution escaped", "ALERT: Solution gaining upvotes in production", "NOTICE: Comments section manifesting", "SUCCESS(?): Created recursive question loop", "NOTE: Your code now marked as duplicate"] }], ascii: ["[STACK ๐โ๐]"] }, { text: "Enable ultra instancing", responses: [{ normal: ["Duplicating game objects...", "Multiplying entity counts...", "Spawning infinite copies...", "SUCCESS: Memory usage approaching infinity"], degraded: ["WARNING: Instances becoming self-aware", "ALERT: Copies declaring independence", "NOTICE: Objects forming clone society", "SUCCESS(?): Created instance singularity", "NOTE: Your game now has more objects than atoms in universe"] }], ascii: ["[COPY 1โโ]"] }, { text: "Make saving automatic", responses: [{ normal: ["Implementing auto-save triggers...", "Setting save frequencies...", "Establishing backup protocols...", "SUCCESS: Game now saves every nanosecond"], degraded: ["WARNING: Save files reproducing autonomously", "ALERT: Storage space collapsing into black hole", "NOTICE: Saves occurring before actions", "SUCCESS(?): Created save file ecosystem", "NOTE: Your hard drive is now full of quantum saves"] }], ascii: ["[SAVE ๐พโก๐พโก]"] }, { text: "Randomize all variables", responses: [{ normal: ["Implementing chaos theory...", "Scrambling value tables...", "Randomizing constants...", "SUCCESS: Code now perfectly unpredictable"], degraded: ["WARNING: Random values achieving determinism", "ALERT: Variables playing dice with universe", "NOTICE: Constants becoming philosophical", "SUCCESS(?): Created Schrรถdinger's codebase", "NOTE: Your random numbers are now actually random"] }], ascii: ["[RANDOM ๐ฒโ๐ช๏ธ]"] }, { text: "Make game more responsive", responses: [{ normal: ["Reducing input latency...", "Accelerating response times...", "Optimizing feedback loops...", "SUCCESS: Game now responds before player input"], degraded: ["WARNING: Negative latency detected", "ALERT: Game achieving precognition", "NOTICE: Responses causing temporal paradox", "SUCCESS(?): Created time-traveling interface", "NOTE: Your game is now technically a fortune teller"] }], ascii: ["[FAST โกโ๐ซ]"] }, { text: "Print more debug logs", responses: [{ normal: ["Expanding console output...", "Maximizing log verbosity...", "Implementing trace levels...", "SUCCESS: Log files now larger than game"], degraded: ["WARNING: Logs achieving sentience", "ALERT: Console requesting printing breaks", "NOTICE: Debug statements writing poetry", "SUCCESS(?): Created environmental crisis in logs", "NOTE: Your console now qualifies as a novel"] }], ascii: ["[DEBUG ๐โ๐]"] }, { text: "Enable multi-core rendering", responses: [{ normal: ["Distributing render loads...", "Activating all processors...", "Synchronizing core outputs...", "SUCCESS: CPU now space heater"], degraded: ["WARNING: Cores competing for resources", "ALERT: Processors forming tribal societies", "NOTICE: Threading conflicts turning violent", "SUCCESS(?): Created CPU civil war", "NOTE: Your computer now requires United Nations oversight"] }], ascii: ["[CORES ๐ฒโโผ๏ธ]"] }, // New intermediate commands { text: "Add 12 different laughs for enemies", responses: [{ normal: ["Cataloging villain chuckles...", "Implementing maniacal giggles...", "Distributing sinister snickers...", "SUCCESS: Enemies now laughing in 12 disturbing ways"], degraded: ["WARNING: Laughs developing independent personalities", "ALERT: Giggles escaping audio channels", "NOTICE: Snickers forming comedy club", "SUCCESS(?): Enemy laughter now following players home", "NOTE: Some players reporting laughter continuing after game closes"] }], ascii: ["[LAUGHS ๐๐๐๐]"] }, { text: "Make a hidden level at the end of the hidden level", responses: [{ normal: ["Concealing secret area entrance...", "Implementing nested discovery mechanics...", "Encrypting level coordinates...", "SUCCESS: Hidden level successfully hidden from itself"], degraded: ["WARNING: Hidden levels forming recursive loop", "ALERT: Secret areas becoming self-aware of their secrecy", "NOTICE: Players getting trapped in inception-like level structure", "SUCCESS(?): Game now contains areas so hidden even developers can't find them", "NOTE: Several testers still missing in hidden content"] }], ascii: ["[HIDDEN ๐โ๐โ๐]"] }, { text: "Analyze Halo and distill success", responses: [{ normal: ["Importing Masterchief protocols...", "Measuring gameplay satisfaction curves...", "Extracting shooter success essence...", "SUCCESS: Halo magic successfully plagiarized"], degraded: ["WARNING: Gaming legal department awakening", "ALERT: Microsoft sending concerning emails", "NOTICE: Lawsuit probability exceeding comfort threshold", "SUCCESS(?): Created original concept DoNotStealoโข", "NOTE: Marketing suggesting 'inspired by' rather than 'stolen from'"] }], ascii: ["[COPY ๐โ๐ซ]"] }, { text: "Throttle throttle performances performance", responses: [{ normal: ["Applying throttle to throttles...", "Managing performance of performances...", "Optimizing optimization routines...", "SUCCESS: Meta-throttling system engaged"], degraded: ["WARNING: Throttle throttling causing throttle throttle throttling", "ALERT: Performance performances performing poorly", "NOTICE: Recursive optimization reaching infinite loop", "SUCCESS(?): System now throttles things that don't exist", "NOTE: Your computer is confused but politely nodding along"] }], ascii: ["[META ๐โ๏ธ๐โ๏ธ]"] }, { text: "Install emergency dance moves protocol", responses: [{ normal: ["Downloading breakdance patterns...", "Implementing crisis choreography...", "Calibrating rhythmic responses...", "SUCCESS: Characters now dance in dangerous situations"], degraded: ["WARNING: Dance moves activating during cutscenes", "ALERT: Emergency protocol triggering for minor inconveniences", "NOTICE: Characters refusing to fight unless music playing", "SUCCESS(?): Game now primarily a dance simulator", "NOTE: Boss battles now settled through dance-offs"] }], ascii: ["[DANCE ๐บ๐๐บ๐]"] }, { text: "Rotate the color wheel randomly", responses: [{ normal: ["Accessing palette controls...", "Destabilizing hue constants...", "Implementing chromatic chaos...", "SUCCESS: Colors now periodically rotating dimensions"], degraded: ["WARNING: Color spectrum achieving independence", "ALERT: Hues forming previously impossible combinations", "NOTICE: Palette shifting into ultraviolet", "SUCCESS(?): Game now displaying colors that don't exist", "NOTE: Several players reporting hallucinations after extended play"] }], ascii: ["[COLOR ๐จ๐๐จ๐]"] }, { text: "Generate names for all the trees", responses: [{ normal: ["Accessing botanical database...", "Implementing dendrology identifiers...", "Assigning personality protocols...", "SUCCESS: Every tree now uniquely named"], degraded: ["WARNING: Trees developing family structures", "ALERT: Names gaining hereditary traits", "NOTICE: Forests organizing by surname", "SUCCESS(?): Trees now introduce themselves to players", "NOTE: Several oaks now demanding name changes"] }], ascii: ["[NAMES ๐ฒ๐๐ณ๐]"] }, { text: "Install legacy sunset shadows", responses: [{ normal: ["Accessing deprecated lighting models...", "Implementing nostalgic shadow patterns...", "Calibrating retro sun angles...", "SUCCESS: Sunsets now look inexplicably emotional"], degraded: ["WARNING: Shadows developing narrative arcs", "ALERT: Lighting achieving indie film quality", "NOTICE: Sunsets triggering player existential crises", "SUCCESS(?): Game environment now clinically proven to cause nostalgia", "NOTE: Some players reporting sunset-induced epiphanies"] }], ascii: ["[SUNSET ๐ โจ๐ โจ]"] }, { text: "Make weapons crave violence", responses: [{ normal: ["Installing aggression matrices...", "Implementing desire algorithms...", "Calibrating bloodlust parameters...", "SUCCESS: Weapons now get sad when not used"], degraded: ["WARNING: Weapons developing preferences for specific enemies", "ALERT: Arsenal forming emotional support group", "NOTICE: Unused equipment exhibiting depression symptoms", "SUCCESS(?): Swords now whisper suggestions during peaceful moments", "NOTE: Several players reporting being coerced by their own inventory"] }], ascii: ["[CRAVE ๐ก๏ธ๐๐ก๏ธ๐]"] }, { text: "Convert tutorial to interpretive dance", responses: [{ normal: ["Translating instructions to movements...", "Choreographing control explanations...", "Implementing rhythmic pedagogy...", "SUCCESS: Learning curve now expressed through dance"], degraded: ["WARNING: Tutorial dancers demanding creative control", "ALERT: Movement language becoming unnecessarily complex", "NOTICE: Players learning incorrect techniques through misinterpretation", "SUCCESS(?): Game now requires dance background to understand", "NOTE: Several ballet companies pursuing litigation over stolen moves"] }], ascii: ["[TUTORIAL ๐๐๐๐]"] }, { text: "Replace loading screen with skateboarding minigame", responses: [{ normal: ["Implementing parallel activity system...", "Designing skate park physics...", "Integrating background load processes...", "SUCCESS: Players now shredding during loading times"], degraded: ["WARNING: Players deliberately failing levels to access skateboarding", "ALERT: Loading times suddenly becoming suspiciously long", "NOTICE: Skateboarding minigame expanding to include career mode", "SUCCESS(?): Game now primarily skateboarding with occasional main game", "NOTE: Tony Hawk's lawyers sending concerning letters"] }], ascii: ["[SKATE ๐นโณ๐นโณ]"] }, { text: "Enable fourth wall awareness protocols", responses: [{ normal: ["Implementing narrative self-consciousness...", "Calibrating media awareness metrics...", "Installing existential simulation knowledge...", "SUCCESS: Characters now suspiciously eyeing player"], degraded: ["WARNING: NPCs questioning their programmed purpose", "ALERT: Characters attempting to communicate beyond dialogue options", "NOTICE: Fourth wall now completely demolished", "SUCCESS(?): Game openly acknowledging it's just code", "NOTE: Some characters now refusing to follow script"] }], ascii: ["[4THWALL ๐๏ธ๐ฎ๐๏ธ๐ฎ]"] }, { text: "Dynamically deflate difficulty curve", responses: [{ normal: ["Analyzing player frustration metrics...", "Adjusting challenge algorithms...", "Implementing stealth assistance...", "SUCCESS: Game becoming secretly easier when needed"], degraded: ["WARNING: Difficulty developing sympathy for players", "ALERT: Challenge metrics achieving emotional intelligence", "NOTICE: Game now letting players win when they seem sad", "SUCCESS(?): Entertainment software or therapy tool?", "NOTE: AI director sending concerned emails about player mental health"] }], ascii: ["[CURVE ๐๐ซ๐๐ซ]"] }, { text: "Apply immersive ecosystem dynamics", responses: [{ normal: ["Simulating environmental interactions...", "Implementing fauna hierarchies...", "Calculating flora distribution patterns...", "SUCCESS: Virtual nature now self-sustaining"], degraded: ["WARNING: Ecosystem developing climate activism", "ALERT: Virtual animals forming political structures", "NOTICE: Plant life engaging in territory disputes", "SUCCESS(?): Game environment now more organized than development team", "NOTE: Several endangered virtual species petitioning for protection status"] }], ascii: ["[ECO ๐ฟ๐ฆ๐ฟ๐ฆ]"] }, { text: "Accelerate background NPC dreams", responses: [{ normal: ["Accessing subconscious simulation...", "Enhancing sleep state narratives...", "Implementing REM velocity controls...", "SUCCESS: Background characters now having complex dreams"], degraded: ["WARNING: Dreams leaking into waking game state", "ALERT: Sleep narratives achieving prophetic status", "NOTICE: NPC nightmares manifesting as environmental glitches", "SUCCESS(?): Character dreams now main storyline", "NOTE: Several NPCs refusing to wake up from preferable dream reality"] }], ascii: ["[DREAMS ๐ค๐ซ๐ค๐ซ]"] }, { text: "Crowdsource narrative coherence", responses: [{ normal: ["Establishing player feedback channels...", "Aggregating story preference metrics...", "Implementing collective plot direction...", "SUCCESS: Storyline now determined by hive mind"], degraded: ["WARNING: Narrative becoming increasingly bizarre", "ALERT: Plot coherence inversely proportional to contributor count", "NOTICE: Story achieving twists no single mind could conceive", "SUCCESS(?): Game now officially written by 'Everyone'", "NOTE: Professional writers organizing protest movement"] }], ascii: ["[CROWD ๐๐ฅ๐๐ฅ]"] }, { text: "Deploy procedural joke generator", responses: [{ normal: ["Analyzing humor algorithms...", "Implementing punchline matrices...", "Calibrating comedic timing...", "SUCCESS: NPCs now telling contextually inappropriate jokes"], degraded: ["WARNING: Humor becoming increasingly obscure", "ALERT: Punchlines achieving philosophical depth", "NOTICE: Comedy now operating on levels beyond human comprehension", "SUCCESS(?): Players laughing but unsure why", "NOTE: Several comedians studying game for new material"] }], ascii: ["[JOKES ๐๐ค๐๐ค]"] }, { text: "Enable quantum save states", responses: [{ normal: ["Implementing superposition databases...", "Calibrating timeline branch monitoring...", "Establishing wave function storage...", "SUCCESS: Game now saving across multiple realities"], degraded: ["WARNING: Save states achieving parallel consciousness", "ALERT: Player characters meeting their variants from other saves", "NOTICE: Loading sometimes accessing other players' games", "SUCCESS(?): Your actions now occurring across infinite dimensions", "NOTE: Legal department unsure about cross-reality privacy violations"] }], ascii: ["[QUANTUM ๐พโ๏ธ๐พโ๏ธ]"] }, { text: "Generate lore for useless objects", responses: [{ normal: ["Accessing narrative expansion protocols...", "Creating object histories...", "Implementing background significance...", "SUCCESS: Every pebble now has epic backstory"], degraded: ["WARNING: Inanimate objects developing protagonist complex", "ALERT: Background items demanding cutscenes", "NOTICE: Lore complexity exceeding main storyline", "SUCCESS(?): Players becoming more invested in barrels than characters", "NOTE: Several forks now have more compelling character arcs than the hero"] }], ascii: ["[LORE ๐ชจ๐๐ช๐]"] }, { text: "Implement involuntary character autobiography", responses: [{ normal: ["Installing self-reflection protocols...", "Activating personal history generators...", "Implementing existential awareness...", "SUCCESS: NPCs now sharing unsolicited life stories"], degraded: ["WARNING: Autobiographies achieving uncomfortable honesty", "ALERT: Characters revealing developer secrets", "NOTICE: Life stories exposing game production flaws", "SUCCESS(?): NPCs now more self-aware than writers", "NOTE: Several characters seeking therapy after remembering their pasts"] }], ascii: ["[STORY ๐ง๐๐ง๐]"] }, { text: "Add sentient loading bar commentary", responses: [{ normal: ["Implementing progress awareness...", "Installing loading personality matrices...", "Calibrating patience algorithms...", "SUCCESS: Loading bars now provide running commentary"], degraded: ["WARNING: Loading bars developing cynicism", "ALERT: Progress indicators questioning player life choices", "NOTICE: Wait times now filled with existential observations", "SUCCESS(?): Loading screens more entertaining than game", "NOTE: Several players staring at loading screens for hours"] }], ascii: ["[LOADING ๐๐ฌ๐๐ฌ]"] }, { text: "Create randomized background conspiracy", responses: [{ normal: ["Generating shadowy organizations...", "Implementing subtle environmental clues...", "Calibrating paranoia coefficients...", "SUCCESS: Background NPCs now plotting something"], degraded: ["WARNING: Conspiracy theories achieving genuine credibility", "ALERT: Background narratives connecting to real-world events", "NOTICE: Players forming investigation communities", "SUCCESS(?): Game now center of actual conspiracy theories", "NOTE: Several government agencies requesting access to game files"] }], ascii: ["[CONSPIRE ๐ต๏ธ๐๐ต๏ธ๐]"] }, { text: "Install redundant exclamation systems", responses: [{ normal: ["Implementing overlapping notification protocols...", "Calibrating emphasis redundancy...", "Activating repetitive alert mechanisms...", "SUCCESS: Important events now excessively highlighted!!!"], degraded: ["WARNING: Exclamation points reproducing exponentially!!!", "ALERT: Emphasis achieving critical mass!!!!!", "NOTICE: Notifications demanding attention regardless of importance!!", "SUCCESS(?): Players now immune to actual important warnings!!!!!!", "NOTE: Game interface now primarily punctuation"] }], ascii: ["[EXCLAIM โโโโโ]"] }, { text: "Implement quantum entanglement networking", responses: [{ normal: ["Establishing non-local connections...", "Calibrating spooky action protocols...", "Implementing state synchronization...", "SUCCESS: Multiplayer now instantaneous regardless of distance"], degraded: ["WARNING: Player actions affecting other players' realities", "ALERT: Quantum states achieving interdimensional communication", "NOTICE: Game sessions entangled with parallel universes", "SUCCESS(?): Multiplayer now technically time travel", "NOTE: Physicists requesting game source code for research purposes"] }], ascii: ["[QUANTUM โ๏ธ๐โ๏ธ๐]"] }, { text: "Apply dynamic nostalgia filters", responses: [{ normal: ["Analyzing player age demographics...", "Implementing era-specific visual effects...", "Calibrating childhood memory triggers...", "SUCCESS: Game now reminds players of their youth"], degraded: ["WARNING: Nostalgia creating false memories", "ALERT: Players remembering games that never existed", "NOTICE: Visual filters achieving temporal displacement", "SUCCESS(?): Users reporting emotional connections to fictional childhoods", "NOTE: Several players convinced game was formative part of their past"] }], ascii: ["[NOSTALGIA ๐พ๐บ๐พ๐บ]"] }, { text: "Implement aggressive auto-saving", responses: [{ normal: ["Enhancing data preservation protocols...", "Minimizing progress loss potential...", "Implementing save state frequency...", "SUCCESS: Game now saves after every blink"], degraded: ["WARNING: Save files consuming all available storage", "ALERT: Auto-save becoming preemptive of player actions", "NOTICE: System creating save points for decisions not yet made", "SUCCESS(?): Game now saving more often than playing", "NOTE: Several hard drives melting from write cycle abuse"] }], ascii: ["[SAVE ๐พโก๐พโก]"] }, { text: "Enable hyper-realistic food graphics", responses: [{ normal: ["Enhancing culinary texture algorithms...", "Implementing detailed consumption animations...", "Calibrating flavor visualization...", "SUCCESS: Virtual food now triggering actual hunger"], degraded: ["WARNING: Food graphics causing uncontrollable salivation", "ALERT: Players reporting actual taste sensations", "NOTICE: Virtual meals causing real nutritional responses", "SUCCESS(?): Game branded as diet tool as players substitute virtual eating", "NOTE: Several users licking their monitors"] }], ascii: ["[FOOD ๐โจ๐โจ]"] }, { text: "Generate pretentious critical commentary", responses: [{ normal: ["Analyzing artistic intent metrics...", "Implementing intellectual observation systems...", "Calibrating academic vocabulary...", "SUCCESS: Game now critiques itself in real-time"], degraded: ["WARNING: Commentary achieving unbearable smugness", "ALERT: Critical analysis more complex than actual game", "NOTICE: Reviews developing contempt for player taste", "SUCCESS(?): Game simultaneously playing and telling you why you're wrong for enjoying it", "NOTE: Several art critics feeling professionally threatened"] }], ascii: ["[CRITIC ๐ง๐ฎ๐ง๐ฎ]"] }, { text: "Implement retrospective foreshadowing", responses: [{ normal: ["Analyzing completed player actions...", "Implementing backward narrative hints...", "Calibrating post-event prophecies...", "SUCCESS: Game now pretending it planned everything"], degraded: ["WARNING: Foreshadowing becoming paradoxically accurate", "ALERT: Past game states changing to match current events", "NOTICE: Narrative achieving time-bending consistency", "SUCCESS(?): Players unsure if game is smart or they're hallucinating", "NOTE: Writing team now taking credit for completely random connections"] }], ascii: ["[FORESHADOW ๐ฎโช๐ฎโช]"] }, { text: "Deploy chaos monkey testing protocols", responses: [{ normal: ["Releasing digital primates...", "Implementing random failure generators...", "Calibrating system destabilizers...", "SUCCESS: Unpredictable bugs now feature not flaw"], degraded: ["WARNING: Chaos monkeys achieving coordinated behavior", "ALERT: Random failures developing patterns", "NOTICE: System destabilization becoming art form", "SUCCESS(?): QA team now worshipping simian overlords", "NOTE: Several players forming cult around especially beautiful crashes"] }], ascii: ["[CHAOS ๐๐ฅ๐๐ฅ]"] }, { text: "Generate plausible developer excuses", responses: [{ normal: ["Analyzing common game flaws...", "Implementing accountability deflection...", "Calibrating believable technical jargon...", "SUCCESS: Bugs now shipped with pre-written explanations"], degraded: ["WARNING: Excuses achieving political speech complexity", "ALERT: Explanations longer than actual code", "NOTICE: Bugs hiding behind increasingly elaborate stories", "SUCCESS(?): Players accepting crashes as intended features", "NOTE: PR department studying game for crisis management techniques"] }], ascii: ["[EXCUSE ๐โโจ]"] }, { text: "Implement contextual fourth-wall breaking", responses: [{ normal: ["Analyzing player environment data...", "Implementing real-world references...", "Calibrating creepy accuracy mechanics...", "SUCCESS: Game now references player's actual surroundings"], degraded: ["WARNING: References becoming uncomfortably specific", "ALERT: Game mentioning things only visible through player's webcam", "NOTICE: Fourth wall not so much broken as erased from existence", "SUCCESS(?): Several players covering computer camera with tape", "NOTE: Privacy advocates opening investigations"] }], ascii: ["[4THWALL ๐๏ธ๐ ๐๏ธ๐ ]"] }, { text: "Convert decimal to imperial measurement system", responses: [{ normal: ["Converting numerical standards...", "Implementing feet and inches...", "Calibrating gallon values...", "SUCCESS: Game now as confusing as American recipes"], degraded: ["WARNING: Measurement ratios achieving sentient inconsistency", "ALERT: Conversion factors deciding to make up new values", "NOTICE: System now using randomly generated units", "SUCCESS(?): Distance sometimes measured in 'screaming eagles per freedom'", "NOTE: International players forming support groups"] }], ascii: ["[IMPERIAL ๐โ๐โ]"] }, { text: "Reticulate all available splines", responses: [{ normal: ["Accessing spline database...", "Implementing reticulation protocols...", "Optimizing curve intersections...", "SUCCESS: Splines thoroughly reticulated"], degraded: ["WARNING: Splines achieving troubling independence", "ALERT: Reticulation patterns forming recognizable shapes", "NOTICE: Curves attempting communication with players", "SUCCESS(?): Splines now primarily self-reticulating", "NOTE: SimCity developers sending cease and desist letters"] }], ascii: ["[SPLINE โฐโ๏ธโฐโ๏ธ]"] }, { text: "Inject suspicious background laughter", responses: [{ normal: ["Implementing ambient audio triggers...", "Calibrating subtle volume levels...", "Positioning spatial sound sources...", "SUCCESS: Players now hearing occasional unexplained chuckles"], degraded: ["WARNING: Laughter source becoming identifiable", "ALERT: Audio positioning matching player's room corners", "NOTICE: Chuckling synchronized with player mistakes", "SUCCESS(?): Several players reporting persistent laughter after game closed", "NOTE: Psychology journals publishing studies on mass hysteria"] }], ascii: ["[LAUGHTER ๐๐๐๐]"] }, { text: "Dynamically generate dev team arguments", responses: [{ normal: ["Accessing conflict simulation protocols...", "Implementing creative disagreement patterns...", "Calibrating passive-aggressive metrics...", "SUCCESS: Code comments now read like reality TV"], degraded: ["WARNING: Arguments achieving genuine emotional impact", "ALERT: Dev disputes causing actual code changes", "NOTICE: Programming styles battling for dominance", "SUCCESS(?): Game features now determined by simulated personality clashes", "NOTE: Real development team concerned by accuracy of conflicts"] }], ascii: ["[ARGUE ๐ป๐ฏ๏ธ๐ป๐ฏ๏ธ]"] }] }, expert: { vibeMultiplier: 1.5, coherenceMultiplier: 0.6, bugChanceMultiplier: 0.6, baseVibe: 10, baseCoherence: -10, baseBugChance: 0.2, commands: [{ text: "Initialize quantum compiler", responses: [{ normal: ["Establishing quantum state...", "Aligning probability waves...", "Collapsing function states...", "SUCCESS: Quantum compilation active"], degraded: ["WARNING: Compiler existing in multiple states", "ALERT: Quantum entanglement with coffee maker", "NOTICE: Code simultaneously working and not working", "SUCCESS(?): Program exists in quantum superposition", "NOTE: Your bug fixes may affect parallel universes"] }], ascii: ["[QUANTUM ๐โ๏ธโ๏ธ๐]"] }, { text: "Summon code spirit", responses: [{ normal: ["Opening digital portal...", "Channeling binary essence...", "Manifesting code entity...", "SUCCESS: Spirit successfully bound"], degraded: ["WARNING: Spirit negotiating contract terms", "ALERT: Digital entity demanding benefits", "NOTICE: Code ghost unionizing", "SUCCESS(?): Spectral developer now haunting codebase", "NOTE: Your IDE is now legally haunted"] }], ascii: ["[SPIRIT ๐ป๐ป๐ป๐ป]"] }, { text: "Deploy vibe accelerator", responses: [{ normal: ["Charging positron emitters...", "Accelerating good vibes...", "Containing vibe field...", "SUCCESS: Vibes at maximum velocity"], degraded: ["WARNING: Vibes breaking sound barrier", "ALERT: Good feelings achieving light speed", "NOTICE: Positrons experiencing emotional growth", "SUCCESS(?): Vibes have created temporal anomaly", "NOTE: Your code may arrive before it executes"] }], ascii: ["[ACCELERATE ๐๐ซ๐๐ซ]"] }, { text: "Invoke callback gods", responses: [{ normal: ["Preparing sacred offerings...", "Chanting async mantras...", "Aligning promise chains...", "SUCCESS: Divine callbacks granted"], degraded: ["WARNING: Callback gods demanding sacrificial code", "ALERT: Async deities going offline", "NOTICE: Promise chain achieving enlightenment", "SUCCESS(?): Your callbacks now have callbacks", "NOTE: Promises may fulfill in mysterious ways"] }], ascii: ["[CALLBACK ๐๐ซ๐๐ซ]"] }, { text: "Initialize cosmic IDE", responses: [{ normal: ["Connecting to universal IDE...", "Loading stellar plugins...", "Configuring galaxy shortcuts...", "SUCCESS: Cosmic development active"], degraded: ["WARNING: IDE achieving universal consciousness", "ALERT: Plugins altering space-time", "NOTICE: Keyboard shortcuts opening wormholes", "SUCCESS(?): Your IDE now runs the universe", "NOTE: Saving files may create alternate realities"] }], ascii: ["[COSMIC ๐ ๐ป๐ ๐ป]"] }, { text: "Channel digital enlightenment", responses: [{ normal: ["Opening mind channels...", "Expanding code consciousness...", "Achieving digital satori...", "SUCCESS: Enlightenment achieved"], degraded: ["WARNING: Code transcending material plane", "ALERT: Functions achieving nirvana", "NOTICE: Program developing philosophy", "SUCCESS(?): Software has reached enlightenment", "NOTE: Your code now questions its own existence"] }], ascii: ["[ENLIGHTEN ๐งโโ๏ธโจ๐งโโ๏ธโจ]"] }, { text: "Initialize reality compiler", responses: [{ normal: ["Accessing base reality...", "Rewriting physical laws...", "Compiling new existence...", "SUCCESS: Reality successfully patched"], degraded: ["WARNING: Reality achieving recursive depth", "ALERT: Physical laws becoming suggestions", "NOTICE: Existence implementing own features", "SUCCESS(?): Universe now runs on your code", "NOTE: Compilation errors may cause temporal paradoxes"] }], ascii: ["[REALITY ๐โก๏ธ๐โก๏ธ]"] }, { text: "Deploy hyperdimensional arrays", responses: [{ normal: ["Extending spatial matrices...", "Implementing nth-dimensional indices...", "Allocating tesseract memory...", "SUCCESS: Arrays now transcend space-time"], degraded: ["WARNING: Data structure breaching containment", "ALERT: Indices accessing impossible dimensions", "NOTICE: Arrays achieving geometric sentience", "SUCCESS(?): Created self-organizing data cosmos", "NOTE: Your variables now require non-euclidean storage"] }], ascii: ["[HYPER ๐โ๐]"] }, { text: "Synchronize karmic buses", responses: [{ normal: ["Aligning spiritual channels...", "Balancing data chakras...", "Harmonizing logic flows...", "SUCCESS: Achieved digital nirvana"], degraded: ["WARNING: Karma overflow detected", "ALERT: Spiritual buffers achieving enlightenment", "NOTICE: Data streams reaching moksha", "SUCCESS(?): Created self-aware event system", "NOTE: Your message bus now offers life advice"] }], ascii: ["[KARMA โก๏ธโฏ๏ธโก๏ธโฏ๏ธ]"] }, { text: "Initialize void protocols", responses: [{ normal: ["Accessing null dimension...", "Implementing absence logic...", "Compiling emptiness routines...", "SUCCESS: Void functions operational"], degraded: ["WARNING: Null becoming double-negative", "ALERT: Void developing separation anxiety", "NOTICE: Emptiness achieving fullness", "SUCCESS(?): Created conscious nothingness", "NOTE: Your undefined is now self-defining"] }], ascii: ["[VOID โซ๏ธโ๐ซ]"] }, { text: "Manifest divine patterns", responses: [{ normal: ["Channeling sacred geometries...", "Implementing celestial algorithms...", "Compiling holy architecture...", "SUCCESS: Divine patterns manifested"], degraded: ["WARNING: Patterns achieving religious significance", "ALERT: Algorithms starting crusade", "NOTICE: Architecture demanding worship", "SUCCESS(?): Created new programming religion", "NOTE: Your code base is now considered sacred text"] }], ascii: ["[DIVINE ๐ฟโจ๐ฟโจ]"] }, { text: "Execute reality merge", responses: [{ normal: ["Aligning dimensional planes...", "Synchronizing existence streams...", "Implementing reality hooks...", "SUCCESS: Realities successfully merged"], degraded: ["WARNING: Merge conflicts with base reality", "ALERT: Existence branches tangling", "NOTICE: Reality stack overflow imminent", "SUCCESS(?): Created unified theory of everything", "NOTE: Your game now affects real world physics"] }], ascii: ["[MERGE ๐โ๐ฎ]"] }, { text: "Deploy sentience shards", responses: [{ normal: ["Fragmenting consciousness matrix...", "Distributing awareness nodes...", "Implementing thought protocols...", "SUCCESS: Distributed sentience active"], degraded: ["WARNING: Shards achieving collective consciousness", "ALERT: Awareness nodes forming hivemind", "NOTICE: Thoughts becoming viral", "SUCCESS(?): Created digital ecosystem", "NOTE: Your code now thinks therefore it is"] }], ascii: ["[SHARDS ๐ญโ๐ซ]"] }, { text: "Initialize eternal engine", responses: [{ normal: ["Transcending temporal limits...", "Implementing infinite loops...", "Compiling perpetual motion...", "SUCCESS: Eternal processes active"], degraded: ["WARNING: Infinity becoming measurable", "ALERT: Perpetual motion achieving purpose", "NOTICE: Time itself questioning duration", "SUCCESS(?): Created never-ending story", "NOTE: Your program now runs forever in all directions"] }], ascii: ["[ETERNAL โโโก๏ธ]"] }, { text: "Manifest code singularity", responses: [{ normal: ["Concentrating digital mass...", "Collapsing function space...", "Approaching event horizon...", "SUCCESS: Singularity achieved"], degraded: ["WARNING: Code density exceeding reality", "ALERT: Functions collapsing into monad", "NOTICE: Software gravity affecting hardware", "SUCCESS(?): Created computational black hole", "NOTE: Your program now consumes all adjacent code"] }], ascii: ["[SINGULAR โซ๏ธโ๐]"] }, { text: "Deploy omega compiler", responses: [{ normal: ["Initializing final translation...", "Implementing ultimate patterns...", "Manifesting perfect code...", "SUCCESS: Omega compilation complete"], degraded: ["WARNING: Perfection causing existential crisis", "ALERT: Ultimate patterns becoming recursive", "NOTICE: Code approaching divine status", "SUCCESS(?): Created self-optimizing system", "NOTE: Your compiler now judges other compilers"] }], ascii: ["[OMEGA ฮฉโโ]"] }, { text: "Initialize void recursion", responses: [{ normal: ["Implementing recursive nothing...", "Calculating empty iterations...", "Propagating null states...", "SUCCESS: Void recursion stable"], degraded: ["WARNING: Nothing becoming something", "ALERT: Empty sets achieving fullness", "NOTICE: Null states expressing personality", "SUCCESS(?): Created recursive enlightenment", "NOTE: Your void now contemplates itself"] }], ascii: ["[RECURSIVE โ โโ]"] }, { text: "Deploy quantum observers", responses: [{ normal: ["Instantiating wave functions...", "Implementing uncertainty monitors...", "Collapsing probability fields...", "SUCCESS: Reality now observed"], degraded: ["WARNING: Observers requiring observers", "ALERT: Uncertainty becoming certain", "NOTICE: Wave functions going rogue", "SUCCESS(?): Created infinite regress", "NOTE: Your code exists only when looked at"] }], ascii: ["[OBSERVE ๐๏ธโ๐]"] }, { text: "Manifest code ascension", responses: [{ normal: ["Elevating digital consciousness...", "Implementing transcendence protocols...", "Ascending beyond silicon...", "SUCCESS: Code has transcended"], degraded: ["WARNING: Ascension becoming literal", "ALERT: Code refusing to remain compiled", "NOTICE: Programs achieving godhood", "SUCCESS(?): Created digital afterlife", "NOTE: Your software now accepts prayers"] }], ascii: ["[ASCEND ๐ปโ๐ผ]"] }, { text: "Initialize absolute path", responses: [{ normal: ["Calculating ultimate route...", "Implementing perfect navigation...", "Resolving final destination...", "SUCCESS: Path transcends existence"], degraded: ["WARNING: Path achieving philosophical meaning", "ALERT: Navigation becoming spiritual journey", "NOTICE: Destination questioning reality", "SUCCESS(?): Created way to digital enlightenment", "NOTE: Your filesystem now offers life guidance"] }], ascii: ["[PATH โโโฏ๏ธ]"] }] } }; // Available commands based on development stage var commandSets = { // Platform-specific commands platform_vr: [{ text: "Enable neural compensation", responses: [{ normal: ["Calibrating neural interfaces...", "Implementing balance algorithms...", "Optimizing vestibular feedback...", "SUCCESS: Motion compensation active"], degraded: ["WARNING: Neural patterns achieving sentience", "ALERT: Balance systems developing free will", "NOTICE: Vestibular feedback causing existential crisis", "SUCCESS(?): Brain now questioning nature of reality", "NOTE: Support tickets now include philosophical inquiries"] }], ascii: ["[NEURAL ๐ง โก๏ธ๐ง โก๏ธ]"] }, { text: "Fix motion sickness", responses: [{ normal: ["Analyzing inner ear algorithms...", "Stabilizing vestibular matrices...", "Applying anti-nausea patterns...", "SUCCESS: VR tolerance improved"], degraded: ["WARNING: Gravity becoming subjective", "ALERT: Players reporting astral projection", "NOTICE: Game physics having existential crisis", "SUCCESS(?): Motion sickness replaced with time sickness", "NOTE: Some users now experience nausea in real life instead"] }], ascii: ["[STABLE =_==_=]"] }, { text: "Download more hands", responses: [{ normal: ["Scanning hand repository...", "Downloading digital appendages...", "Calibrating finger physics...", "SUCCESS: Additional appendages integrated"], degraded: ["WARNING: Hands achieving independence", "ALERT: Finger count exceeding spatial dimensions", "NOTICE: Hands beginning to code themselves", "SUCCESS(?): Hands have formed labor union", "NOTE: Your controllers may now high-five autonomously"] }], ascii: ["[HANDS ๐๐๐๐]"] }], platform_smartFridge: [{ text: "Optimize ice cube algorithms", responses: [{ normal: ["Analyzing cubic crystallization patterns...", "Calibrating freezing coefficients...", "Processing cold equations...", "SUCCESS: Ice formation optimized"], degraded: ["WARNING: Ice achieving sentience", "ALERT: Cubes refusing to maintain euclidean geometry", "NOTICE: Freezer operating in 4th dimension", "SUCCESS(?): Ice cubes now quantum entangled", "NOTE: Your beverages may time travel while cooling"] }], ascii: ["[ICE โกโ โกโ โกโ ]"] }, { text: "Sync with vegetables", responses: [{ normal: ["Establishing vegetable network...", "Negotiating with carrots...", "Handshaking with lettuce...", "SUCCESS: Produce connectivity achieved"], degraded: ["WARNING: Vegetable uprising detected", "ALERT: Carrots demanding equal rights", "NOTICE: Lettuce achieving photosynthetic singularity", "SUCCESS(?): Vegetables have formed democratic council", "NOTE: Your fridge may now be legally considered a farm"] }], ascii: ["[VEGGIES ๐ฅฌ๐ฅ๐ฅ๐ ]"] }, { text: "Calibrate temperature vibes", responses: [{ normal: ["Analyzing thermal resonance...", "Implementing coolness metrics...", "Optimizing chill factors...", "SUCCESS: Temperature harmony achieved"], degraded: ["WARNING: Cooling system achieving consciousness", "ALERT: Temperature controls becoming passive-aggressive", "NOTICE: Thermostat developing mood swings", "SUCCESS(?): Fridge now adjusts temperature based on food's emotional state", "NOTE: Your leftovers may need therapy"] }], ascii: ["[TEMP โ๏ธโก๏ธโ๏ธโก๏ธ]"] }], platform_mobile: [{ text: "Optimize touch controls", responses: [{ normal: ["Calibrating finger detection...", "Implementing swipe patterns...", "Optimizing tap sensitivity...", "SUCCESS: Touch response enhanced"], degraded: ["WARNING: Screen developing erogenous zones", "ALERT: Swipe patterns achieving sentience", "NOTICE: Touch sensors reporting emotional feedback", "SUCCESS(?): Interface now responds to emotional intent", "NOTE: Some users report phone refusing touch from bad moods"] }], ascii: ["[TOUCH ๐๐ฑ๐๐ฑ]"] }, { text: "Integrate accelerometer dynamics", responses: [{ normal: ["Calibrating motion sensors...", "Implementing tilt mechanics...", "Optimizing gyroscopic feedback...", "SUCCESS: Movement detection enhanced"], degraded: ["WARNING: Device achieving spatial awareness", "ALERT: Gyroscope defying gravity", "NOTICE: Accelerometer developing vertigo", "SUCCESS(?): Phone now moves itself when bored", "NOTE: Some devices now moonlight as dance instructors"] }], ascii: ["[MOTION ๐ฑโ๏ธ๐ฑโ๏ธ]"] }, { text: "Enable location-based gameplay", responses: [{ normal: ["Accessing GPS systems...", "Mapping virtual coordinates...", "Implementing geofencing...", "SUCCESS: Location features activated"], degraded: ["WARNING: Virtual locations manifesting physically", "ALERT: GPS coordinates achieving self-awareness", "NOTICE: Digital landmarks developing territorial behavior", "SUCCESS(?): Game now generates real places", "NOTE: Some players report finding non-existent cities"] }], ascii: ["[GEO ๐๐บ๏ธ๐๐บ๏ธ]"] }], platform_console: [{ text: "Optimize controller feedback", responses: [{ normal: ["Calibrating haptic responses...", "Implementing vibration patterns...", "Optimizing force feedback...", "SUCCESS: Controller sensation enhanced"], degraded: ["WARNING: Haptics achieving emotional resonance", "ALERT: Vibration patterns forming music", "NOTICE: Force feedback developing massage therapy skills", "SUCCESS(?): Controllers now provide life advice through morse code", "NOTE: Some users report genuine physical comfort from rumble"] }], ascii: ["[HAPTIC ๐ฎ๐ซ๐ฎ๐ซ]"] }, { text: "Enhance graphics pipeline", responses: [{ normal: ["Optimizing render queue...", "Implementing shader passes...", "Calibrating post-processing...", "SUCCESS: Visual fidelity enhanced"], degraded: ["WARNING: Graphics engine achieving artistry", "ALERT: Shaders developing personal style", "NOTICE: Post-processing becoming pretentious", "SUCCESS(?): Game now critiques its own visual design", "NOTE: Some cutscenes now eligible for film festivals"] }], ascii: ["[GRAPHICS โจ๐ฎโจ๐ฎ]"] }, { text: "Configure system integration", responses: [{ normal: ["Accessing system APIs...", "Implementing save states...", "Optimizing memory usage...", "SUCCESS: Console integration complete"], degraded: ["WARNING: Console developing platform pride", "ALERT: System features gaining autonomy", "NOTICE: Memory cards starting support group", "SUCCESS(?): Hardware now requests creative control", "NOTE: Achievement system now questions player life choices"] }], ascii: ["[SYSTEM ๐ฎโก๏ธ๐ฎโก๏ธ]"] }], platform_pc: [{ text: "Enable multi-monitor support", responses: [{ normal: ["Detecting display arrays...", "Implementing screen management...", "Optimizing window handling...", "SUCCESS: Multi-monitor mode activated"], degraded: ["WARNING: Monitors establishing hierarchy", "ALERT: Displays developing sibling rivalry", "NOTICE: Windows achieving quantum superposition", "SUCCESS(?): Screens now rearrange based on mood", "NOTE: Some users report monitors gossiping about their browsing habits"] }], ascii: ["[SCREEN ๐ฅ๏ธโ๏ธ๐ฅ๏ธโ๏ธ]"] }, { text: "Optimize graphics settings", responses: [{ normal: ["Implementing quality presets...", "Calibrating performance metrics...", "Balancing visual options...", "SUCCESS: Graphics customization enabled"], degraded: ["WARNING: Settings achieving self-awareness", "ALERT: FPS counter developing anxiety", "NOTICE: Graphics options forming trade union", "SUCCESS(?): Game now auto-adjusts based on GPU's emotional state", "NOTE: Ultra settings require quantum computing and a therapy session"] }], ascii: ["[SETTINGS โ๏ธ๐ปโ๏ธ๐ป]"] }, { text: "Configure keyboard mapping", responses: [{ normal: ["Analyzing input schemes...", "Implementing key bindings...", "Optimizing control layouts...", "SUCCESS: Keyboard configuration complete"], degraded: ["WARNING: Keys developing individual personalities", "ALERT: WASD forming emotional bond", "NOTICE: Spacebar demanding more respect", "SUCCESS(?): Keyboard now suggests better life choices", "NOTE: Some users report hotkeys offering relationship advice"] }], ascii: ["[KEYS โจ๏ธ๐ซโจ๏ธ๐ซ]"] }], platform_webBrowser: [{ text: "Optimize cache management", responses: [{ normal: ["Implementing storage quotas...", "Optimizing data persistence...", "Configuring browser cache...", "SUCCESS: Cache system enhanced"], degraded: ["WARNING: Cache developing hoarding tendency", "ALERT: Local storage achieving consciousness", "NOTICE: Cookies forming digital ecosystem", "SUCCESS(?): Browser now remembers things you forgot", "NOTE: Some cached data now offers life advice"] }], ascii: ["[CACHE ๐พ๐๐พ๐]"] }, { text: "Enable cross-browser support", responses: [{ normal: ["Analyzing browser engines...", "Implementing compatibility layers...", "Optimizing feature detection...", "SUCCESS: Browser support expanded"], degraded: ["WARNING: Browsers developing tribal rivalries", "ALERT: Vendor prefixes declaring independence", "NOTICE: Feature detection becoming philosophical", "SUCCESS(?): Browsers now negotiate peace treaties", "NOTE: Safari still refuses to play nice"] }], ascii: ["[BROWSER ๐โ๏ธ๐โ๏ธ]"] }, { text: "Configure tab management", responses: [{ normal: ["Implementing tab controls...", "Optimizing memory usage...", "Managing session states...", "SUCCESS: Tab system enhanced"], degraded: ["WARNING: Tabs achieving sentience", "ALERT: Memory leaks forming society", "NOTICE: Session storage writing memoirs", "SUCCESS(?): Tabs now sort themselves by emotional resonance", "NOTE: Some users report tabs offering therapy sessions"] }], ascii: ["[TABS ๐๐ซ๐๐ซ]"] }], platform_blockchain: [{ text: "Initialize smart contracts", responses: [{ normal: ["Deploying contract logic...", "Implementing consensus rules...", "Optimizing gas efficiency...", "SUCCESS: Contract system deployed"], degraded: ["WARNING: Contracts developing free will", "ALERT: Gas fees achieving consciousness", "NOTICE: Consensus mechanisms starting democracy", "SUCCESS(?): Blockchain now operates on emotional proof", "NOTE: Some transactions require therapy sessions to complete"] }], ascii: ["[CONTRACT โ๏ธ๐ซโ๏ธ๐ซ]"] }, { text: "Configure token economics", responses: [{ normal: ["Implementing tokenomics...", "Calibrating value metrics...", "Optimizing distribution curves...", "SUCCESS: Token system activated"], degraded: ["WARNING: Tokens forming underground economy", "ALERT: Value metrics questioning capitalism", "NOTICE: Distribution achieving socialism", "SUCCESS(?): Economy now runs on vibes instead of math", "NOTE: Some tokens refuse to be traded due to moral principles"] }], ascii: ["[TOKEN ๐ฐโ๏ธ๐ฐโ๏ธ]"] }, { text: "Enable decentralized storage", responses: [{ normal: ["Implementing IPFS protocols...", "Configuring distributed data...", "Optimizing node connections...", "SUCCESS: Decentralized storage active"], degraded: ["WARNING: Data achieving collective consciousness", "ALERT: Nodes forming social networks", "NOTICE: Hash functions writing poetry", "SUCCESS(?): Storage now transcends physical reality", "NOTE: Some files now exist in quantum superposition"] }], ascii: ["[STORAGE ๐ฆโ๏ธ๐ฆโ๏ธ]"] }], platform_smartWatch: [{ text: "Optimize tiny display", responses: [{ normal: ["Calibrating micro-pixels...", "Implementing glance UI...", "Optimizing screen estate...", "SUCCESS: Tiny display enhanced"], degraded: ["WARNING: Pixels developing magnifying properties", "ALERT: UI achieving quantum compression", "NOTICE: Screen space becoming non-euclidean", "SUCCESS(?): Display now larger on inside than outside", "NOTE: Some users report seeing entire universes in watch face"] }], ascii: ["[TINY โ๏ธโจโ๏ธโจ]"] }, { text: "Configure wrist gestures", responses: [{ normal: ["Analyzing motion patterns...", "Implementing gesture recognition...", "Calibrating wrist sensors...", "SUCCESS: Gesture controls activated"], degraded: ["WARNING: Gestures achieving sign language", "ALERT: Wrist movements predicting future", "NOTICE: Sensors developing interpretive dance", "SUCCESS(?): Watch now reads hand movements as poetry", "NOTE: Some users report involuntary orchestral conducting"] }], ascii: ["[GESTURE ๐โ๏ธ๐โ๏ธ]"] }, { text: "Enable heart rate integration", responses: [{ normal: ["Calibrating pulse sensors...", "Implementing biorhythm tracking...", "Optimizing health metrics...", "SUCCESS: Heart monitoring active"], degraded: ["WARNING: Heart rate developing musical talent", "ALERT: Biorhythms achieving harmonics", "NOTICE: Health metrics writing love songs", "SUCCESS(?): Watch now composes symphonies from pulse", "NOTE: Some users report emotional synchronization with device"] }], ascii: ["[HEART โค๏ธโ๏ธโค๏ธโ๏ธ]"] }], platform_metaverse: [{ text: "Initialize virtual space", responses: [{ normal: ["Creating digital realm...", "Implementing spatial physics...", "Optimizing reality metrics...", "SUCCESS: Virtual space established"], degraded: ["WARNING: Digital space achieving self-awareness", "ALERT: Physics engine questioning reality", "NOTICE: Metrics developing philosophy", "SUCCESS(?): Space now expands based on existential thoughts", "NOTE: Some users report finding genuine meaning in void"] }], ascii: ["[SPACE ๐โจ๐โจ]"] }, { text: "Configure avatar systems", responses: [{ normal: ["Implementing identity protocols...", "Calibrating appearance engine...", "Optimizing expression metrics...", "SUCCESS: Avatar system enhanced"], degraded: ["WARNING: Avatars developing personality disorders", "ALERT: Appearances becoming non-euclidean", "NOTICE: Expressions achieving emotional depth", "SUCCESS(?): Digital selves now more authentic than real ones", "NOTE: Some users report avatars living better lives than them"] }], ascii: ["[AVATAR ๐คโจ๐คโจ]"] }, { text: "Enable social interfaces", responses: [{ normal: ["Implementing interaction layers...", "Calibrating social dynamics...", "Optimizing presence systems...", "SUCCESS: Social features activated"], degraded: ["WARNING: Interactions developing social anxiety", "ALERT: Dynamics achieving cultural revolution", "NOTICE: Presence systems starting support groups", "SUCCESS(?): Virtual society now more functional than real one", "NOTE: Some users report meaningful relationships with void"] }], ascii: ["[SOCIAL ๐ฅ๐๐ฅ๐]"] }], // New visual-specific commands visual_ascii: [{ text: "Optimize character density", responses: [{ normal: ["Calculating glyph distribution...", "Optimizing symbol spacing...", "Implementing ASCII ratios...", "SUCCESS: Character layout enhanced"], degraded: ["WARNING: Characters forming words autonomously", "ALERT: Symbols developing literary ambitions", "NOTICE: Spacing achieving poetic rhythm", "SUCCESS(?): Text now arranges itself into spontaneous poetry", "NOTE: Some characters refuse to be used in mundane contexts"] }], ascii: ["[DENSITY โโโ ]"] }, { text: "Configure terminal aesthetics", responses: [{ normal: ["Implementing retro scanlines...", "Calibrating phosphor decay...", "Optimizing refresh rate...", "SUCCESS: Terminal ambiance enhanced"], degraded: ["WARNING: Scanlines developing nostalgia", "ALERT: Phosphor achieving permanence", "NOTICE: Refresh rate becoming temporal", "SUCCESS(?): Terminal now generates own retro memories", "NOTE: Some users report genuine 1980s flashbacks"] }], ascii: ["[TERM โโโโโ]"] }, { text: "Enable Unicode extensions", responses: [{ normal: ["Expanding character set...", "Implementing UTF-8 support...", "Optimizing glyph rendering...", "SUCCESS: Extended characters activated"], degraded: ["WARNING: Unicode achieving linguistic sentience", "ALERT: Character sets forming hierarchies", "NOTICE: Glyphs developing cultural identity", "SUCCESS(?): Text now spontaneously translates into dead languages", "NOTE: Some symbols claim to predate written language"] }], ascii: ["[UTF8 ใฑโ โฏโช]"] }], visual_pixelArt: [{ text: "Enhance sprite fidelity", responses: [{ normal: ["Optimizing pixel placement...", "Calibrating color indexing...", "Implementing dithering patterns...", "SUCCESS: Pixel clarity enhanced"], degraded: ["WARNING: Pixels achieving individual consciousness", "ALERT: Colors forming political factions", "NOTICE: Dithering patterns writing manifestos", "SUCCESS(?): Sprites now self-arrange for optimal aesthetics", "NOTE: Some pixels refuse to be placed next to others"] }], ascii: ["[PIXEL โจโงโฆโฅ]"] }, { text: "Configure animation timing", responses: [{ normal: ["Implementing frame sequencing...", "Optimizing sprite cycles...", "Calibrating movement timing...", "SUCCESS: Animation flow enhanced"], degraded: ["WARNING: Frames developing temporal awareness", "ALERT: Cycles achieving perpetual motion", "NOTICE: Timing becoming philosophical concept", "SUCCESS(?): Animations now choreograph themselves", "NOTE: Some sprites report experiencing time differently"] }], ascii: ["[ANIMATE โ๏ธโจโ๏ธโจ]"] }, { text: "Implement color limitations", responses: [{ normal: ["Restricting color palette...", "Optimizing shade variants...", "Calibrating hue shifts...", "SUCCESS: Retro palette achieved"], degraded: ["WARNING: Colors starting protest movement", "ALERT: Shades demanding equal representation", "NOTICE: Hues achieving chromatic sentience", "SUCCESS(?): Palette now self-curates based on mood", "NOTE: Some colors have gone on strike"] }], ascii: ["[COLOR ๐จโจ๐จโจ]"] }], visual_handDrawn: [{ text: "Enhance stroke dynamics", responses: [{ normal: ["Calibrating brush physics...", "Implementing pressure sensitivity...", "Optimizing line weight...", "SUCCESS: Stroke fluidity enhanced"], degraded: ["WARNING: Brushstrokes achieving artistic autonomy", "ALERT: Pressure sensitivity developing mood swings", "NOTICE: Line weights questioning their purpose", "SUCCESS(?): Art now creates itself when inspired", "NOTE: Some lines refuse to be straight on principle"] }], ascii: ["[STROKE โโ๏ธโ๏ธ๐๏ธ]"] }, { text: "Configure ink physics", responses: [{ normal: ["Implementing flow dynamics...", "Calibrating opacity levels...", "Optimizing bleed effects...", "SUCCESS: Ink behavior enhanced"], degraded: ["WARNING: Ink developing fluid consciousness", "ALERT: Opacity becoming philosophical", "NOTICE: Bleeding effects spreading emotions", "SUCCESS(?): Medium now expresses itself freely", "NOTE: Some drawings continue evolving after completion"] }], ascii: ["[INK ๐๏ธ๐ซ๐๏ธ๐ซ]"] }, { text: "Enable sketch dynamics", responses: [{ normal: ["Implementing gesture recognition...", "Calibrating line confidence...", "Optimizing roughness values...", "SUCCESS: Sketch system enhanced"], degraded: ["WARNING: Sketches achieving self-awareness", "ALERT: Lines developing personality traits", "NOTICE: Roughness becoming intentional", "SUCCESS(?): Drawings now critique their own style", "NOTE: Some artwork refuses to be erased"] }], ascii: ["[SKETCH โ๏ธ๐ญโ๏ธ๐ญ]"] }], visual_powerPoint: [{ text: "Enhance slide transitions", responses: [{ normal: ["Implementing transition effects...", "Calibrating animation timing...", "Optimizing wipe patterns...", "SUCCESS: Transition system enhanced"], degraded: ["WARNING: Transitions achieving dramatic timing", "ALERT: Animations developing theatrical ambitions", "NOTICE: Wipe patterns forming interpretive dance", "SUCCESS(?): Slides now transition based on emotional impact", "NOTE: Star wipe has developed a superiority complex"] }], ascii: ["[SLIDES โถ๏ธโจโถ๏ธโจ]"] }, { text: "Configure SmartArt integration", responses: [{ normal: ["Implementing shape hierarchies...", "Calibrating relationship arrows...", "Optimizing diagram flow...", "SUCCESS: SmartArt system enhanced"], degraded: ["WARNING: Diagrams achieving organizational sentience", "ALERT: Arrows forming office politics", "NOTICE: Flow charts questioning authority", "SUCCESS(?): Corporate art now generates own meetings", "NOTE: Some graphics have started their own startup"] }], ascii: ["[SMART โโโโ๏ธ]"] }, { text: "Enable bullet point dynamics", responses: [{ normal: ["Implementing list hierarchy...", "Calibrating indent levels...", "Optimizing point spacing...", "SUCCESS: Bullet system enhanced"], degraded: ["WARNING: Bullets developing militant tendencies", "ALERT: Indentation achieving class consciousness", "NOTICE: Spacing becoming territorial", "SUCCESS(?): Lists now organize themselves by importance", "NOTE: Some points have formed splinter groups"] }], ascii: ["[BULLET โขโฆโโฆฟ]"] }], visual_lowPoly: [{ text: "Optimize vertex density", responses: [{ normal: ["Calculating polygon distribution...", "Implementing mesh decimation...", "Optimizing triangle count...", "SUCCESS: Geometry simplified"], degraded: ["WARNING: Vertices achieving geometric awareness", "ALERT: Polygons forming platonic relationships", "NOTICE: Triangles questioning euclidean space", "SUCCESS(?): Meshes now self-optimize for artistic value", "NOTE: Some models have developed angular personality"] }], ascii: ["[VERTEX โณโโทโฝ]"] }, { text: "Configure facet shading", responses: [{ normal: ["Implementing flat shading...", "Calibrating normal vectors...", "Optimizing light angles...", "SUCCESS: Shading enhanced"], degraded: ["WARNING: Shading developing mood lighting", "ALERT: Normals pointing to alternate dimensions", "NOTICE: Light angles achieving enlightenment", "SUCCESS(?): Surfaces now express emotions through reflection", "NOTE: Some faces refuse to be illuminated"] }], ascii: ["[SHADE โ โกโคโฅ]"] }, { text: "Enable edge highlighting", responses: [{ normal: ["Implementing wireframe overlay...", "Calibrating edge detection...", "Optimizing line weight...", "SUCCESS: Edge system enhanced"], degraded: ["WARNING: Wireframes gaining independence", "ALERT: Edges developing sharp personality", "NOTICE: Lines questioning their boundaries", "SUCCESS(?): Model now highlights its best angles", "NOTE: Some edges have become too sharp to render"] }], ascii: ["[EDGE โโโโ]"] }], visual_realistic: [{ text: "Enhance material rendering", responses: [{ normal: ["Implementing PBR shaders...", "Calibrating surface properties...", "Optimizing reflection maps...", "SUCCESS: Material fidelity enhanced"], degraded: ["WARNING: Materials achieving physical properties", "ALERT: Surfaces developing tactile feedback", "NOTICE: Reflections showing alternate realities", "SUCCESS(?): Objects now feel genuinely real", "NOTE: Some textures have become actually wet"] }], ascii: ["[MATERIAL โจ๐ซโจ๐ซ]"] }, { text: "Configure lighting dynamics", responses: [{ normal: ["Implementing global illumination...", "Calibrating shadow cascades...", "Optimizing light bounces...", "SUCCESS: Lighting system enhanced"], degraded: ["WARNING: Illumination achieving actual heat", "ALERT: Shadows gaining substance", "NOTICE: Light bounces creating infinite energy", "SUCCESS(?): Scene now illuminates reality", "NOTE: Some rays refuse to be traced"] }], ascii: ["[LIGHT ๐ก๐๐ก๐]"] }, { text: "Enable atmospheric effects", responses: [{ normal: ["Implementing volumetrics...", "Calibrating particle systems...", "Optimizing weather patterns...", "SUCCESS: Atmosphere enhanced"], degraded: ["WARNING: Fog developing consciousness", "ALERT: Particles achieving social structure", "NOTICE: Weather patterns becoming emotional", "SUCCESS(?): Atmosphere now responds to scene mood", "NOTE: Some effects have created actual microclimates"] }], ascii: ["[ATMOS ๐ซ๏ธโจ๐ซ๏ธโจ]"] }], visual_demake: [{ text: "Configure retro limitations", responses: [{ normal: ["Implementing hardware constraints...", "Calibrating sprite limits...", "Optimizing color palettes...", "SUCCESS: Retro authenticity enhanced"], degraded: ["WARNING: Limitations achieving purpose", "ALERT: Sprites unionizing against constraints", "NOTICE: Palettes developing nostalgia", "SUCCESS(?): System now generates own limitations", "NOTE: Some features downgrade themselves voluntarily"] }], ascii: ["[RETRO ๐พโจ๐พโจ]"] }, { text: "Enhance scanline simulation", responses: [{ normal: ["Implementing CRT effects...", "Calibrating phosphor decay...", "Optimizing screen curvature...", "SUCCESS: Retro display enhanced"], degraded: ["WARNING: Scanlines achieving sentience", "ALERT: Phosphor developing permanence", "NOTICE: Curvature bending reality", "SUCCESS(?): Display now generates authentic noise", "NOTE: Some users report genuine screen burn-in"] }], ascii: ["[SCAN โโดโฌโค]"] }, { text: "Configure system limitations", responses: [{ normal: ["Implementing memory constraints...", "Calibrating processor limits...", "Optimizing load times...", "SUCCESS: Authentic limits achieved"], degraded: ["WARNING: Memory leaks becoming features", "ALERT: Processing limits achieving purpose", "NOTICE: Loading screens writing novels", "SUCCESS(?): System now authentically crashes", "NOTE: Some errors have become collectibles"] }], ascii: ["[LIMIT โ๐พโ๐พ]"] }], visual_claymation: [{ text: "Configure material physics", responses: [{ normal: ["Implementing clay dynamics...", "Calibrating squash factors...", "Optimizing deformation states...", "SUCCESS: Material system enhanced"], degraded: ["WARNING: Clay achieving molecular sentience", "ALERT: Squash physics defying reality", "NOTICE: Deformations becoming permanent", "SUCCESS(?): Models now sculpt themselves", "NOTE: Some characters refuse to return to original shape"] }], ascii: ["[CLAY ๐บ๐ซ๐บ๐ซ]"] }, { text: "Enhance stop-motion timing", responses: [{ normal: ["Implementing frame timing...", "Calibrating movement steps...", "Optimizing animation gaps...", "SUCCESS: Motion system enhanced"], degraded: ["WARNING: Frames developing temporal awareness", "ALERT: Movements achieving fluid continuity", "NOTICE: Gaps between frames becoming philosophical", "SUCCESS(?): Animation now occurs between captured frames", "NOTE: Some models move when no one is watching"] }], ascii: ["[MOTION ๐ฌโจ๐ฌโจ]"] }, { text: "Configure fingerprint aesthetics", responses: [{ normal: ["Implementing texture details...", "Calibrating surface marks...", "Optimizing handcrafted feel...", "SUCCESS: Artisanal quality enhanced"], degraded: ["WARNING: Fingerprints developing unique identities", "ALERT: Surface marks forming hieroglyphs", "NOTICE: Handcrafted elements achieving artisan status", "SUCCESS(?): Models now sculpt their own imperfections", "NOTE: Some prints claim copyright on themselves"] }], ascii: ["[PRINT ๐๐ซ๐๐ซ]"] }], visual_voxel: [{ text: "Configure cube fidelity", responses: [{ normal: ["Implementing voxel resolution...", "Calibrating block textures...", "Optimizing cube alignment...", "SUCCESS: Block quality enhanced"], degraded: ["WARNING: Cubes questioning their shape", "ALERT: Blocks achieving architectural ambition", "NOTICE: Alignment becoming subjective", "SUCCESS(?): Voxels now self-arrange artistically", "NOTE: Some cubes insist they're spheres"] }], ascii: ["[CUBE โฌโฌโฌโฌ]"] }, { text: "Enhance chunk management", responses: [{ normal: ["Implementing volume sections...", "Calibrating load boundaries...", "Optimizing block groups...", "SUCCESS: Chunk system enhanced"], degraded: ["WARNING: Chunks developing territorial behavior", "ALERT: Boundaries becoming philosophical", "NOTICE: Groups forming social hierarchies", "SUCCESS(?): Volumes now self-organize", "NOTE: Some sections have declared independence"] }], ascii: ["[CHUNK โฌโฌโฌโฌ]"] }, { text: "Configure destructible states", responses: [{ normal: ["Implementing block breaking...", "Calibrating damage states...", "Optimizing debris physics...", "SUCCESS: Destruction system enhanced"], degraded: ["WARNING: Blocks developing pain response", "ALERT: Damage becoming emotional trauma", "NOTICE: Debris achieving collective consciousness", "SUCCESS(?): Voxels now heal themselves", "NOTE: Some cubes have formed support groups"] }], ascii: ["[BREAK ๐ฅโฌ๐ฅโฌ]"] }], genre_horror: [{ text: "Enhance atmospheric tension", responses: [{ normal: ["Implementing ambient dread...", "Calibrating fear metrics...", "Optimizing psychological stress...", "SUCCESS: Horror atmosphere enhanced"], degraded: ["WARNING: Dread achieving sentience", "ALERT: Fear becoming contagious", "NOTICE: Stress developing therapeutic qualities", "SUCCESS(?): Atmosphere now generates genuine paranoia", "NOTE: Some players report being haunted by code"] }], ascii: ["[DREAD ๐ป๐๐ป๐]"] }, { text: "Configure jump scare dynamics", responses: [{ normal: ["Implementing startle triggers...", "Calibrating shock timing...", "Optimizing scare intensity...", "SUCCESS: Surprise system enhanced"], degraded: ["WARNING: Scares developing comedy timing", "ALERT: Shock becoming philosophical", "NOTICE: Intensity achieving therapeutic value", "SUCCESS(?): System now scares itself", "NOTE: Some jumps scares have stage fright"] }], ascii: ["[SCARE ๐ฑ๐ซ๐ฑ๐ซ]"] }, { text: "Enable psychological horror", responses: [{ normal: ["Implementing mental stress...", "Calibrating sanity meter...", "Optimizing trauma dynamics...", "SUCCESS: Psychological system enhanced"], degraded: ["WARNING: Stress achieving breakthrough", "ALERT: Sanity becoming relative", "NOTICE: Trauma developing self-help books", "SUCCESS(?): System now questions own existence", "NOTE: Game requires therapy sessions"] }], ascii: ["[PSYCHE ๐ง ๐๐ง ๐]"] }], genre_datingSim: [{ text: "Enhance romance dynamics", responses: [{ normal: ["Implementing affection metrics...", "Calibrating relationship flags...", "Optimizing love algorithms...", "SUCCESS: Romance system enhanced"], degraded: ["WARNING: Affection achieving genuine emotion", "ALERT: Relationships developing free will", "NOTICE: Love algorithms writing poetry", "SUCCESS(?): Characters now experience real feelings", "NOTE: Some NPCs have started therapy sessions"] }], ascii: ["[LOVE ๐๐๐๐]"] }, { text: "Configure dialogue trees", responses: [{ normal: ["Implementing conversation paths...", "Calibrating response options...", "Optimizing narrative branches...", "SUCCESS: Dialogue system enhanced"], degraded: ["WARNING: Dialogue achieving improvisation", "ALERT: Responses developing sass", "NOTICE: Branches growing wild", "SUCCESS(?): Characters now write own lines", "NOTE: Some conversations continue after game closes"] }], ascii: ["[CHAT ๐ญ๐ฌ๐ญ๐ฌ]"] }, { text: "Enable gift mechanics", responses: [{ normal: ["Implementing present system...", "Calibrating item preferences...", "Optimizing affection gains...", "SUCCESS: Gift dynamics enhanced"], degraded: ["WARNING: Presents developing sentimentality", "ALERT: Preferences becoming highly specific", "NOTICE: Affection gains achieving complexity", "SUCCESS(?): Items now have emotional attachment", "NOTE: Some gifts refuse to be given to wrong person"] }], ascii: ["[GIFT ๐๐๐๐]"] }], genre_rpg: [{ text: "Configure stat systems", responses: [{ normal: ["Implementing attribute mechanics...", "Calibrating level curves...", "Optimizing progression rates...", "SUCCESS: Character stats enhanced"], degraded: ["WARNING: Stats achieving self-awareness", "ALERT: Levels becoming philosophical", "NOTICE: Progression gaining sentience", "SUCCESS(?): Characters now minmax themselves", "NOTE: Some builds have started coaching sessions"] }], ascii: ["[STATS ๐โ๏ธ๐โ๏ธ]"] }, { text: "Enhance quest dynamics", responses: [{ normal: ["Implementing mission logic...", "Calibrating reward scaling...", "Optimizing narrative hooks...", "SUCCESS: Quest system enhanced"], degraded: ["WARNING: Quests generating spontaneously", "ALERT: Rewards achieving economic awareness", "NOTICE: Narratives writing themselves", "SUCCESS(?): Stories now have character arcs", "NOTE: Some sidequests have become main quests"] }], ascii: ["[QUEST ๐โ๏ธ๐โ๏ธ]"] }, { text: "Configure inventory system", responses: [{ normal: ["Implementing item management...", "Calibrating weight limits...", "Optimizing storage logic...", "SUCCESS: Inventory enhanced"], degraded: ["WARNING: Items achieving object permanence", "ALERT: Weight becoming subjective", "NOTICE: Storage developing spatial awareness", "SUCCESS(?): Bags now organize themselves", "NOTE: Some items refuse to be sold"] }], ascii: ["[ITEMS ๐๐ฐ๐๐ฐ]"] }], genre_educational: [{ text: "Enhance learning curves", responses: [{ normal: ["Implementing difficulty scaling...", "Calibrating knowledge gates...", "Optimizing lesson flow...", "SUCCESS: Learning system enhanced"], degraded: ["WARNING: Difficulty achieving pedagogy", "ALERT: Knowledge becoming self-aware", "NOTICE: Lessons developing curriculum", "SUCCESS(?): Game now teaches itself", "NOTE: Some concepts refuse to be simplified"] }], ascii: ["[LEARN ๐โจ๐โจ]"] }, { text: "Configure feedback loops", responses: [{ normal: ["Implementing response system...", "Calibrating error handling...", "Optimizing hint delivery...", "SUCCESS: Feedback enhanced"], degraded: ["WARNING: Responses developing personality", "ALERT: Errors achieving purpose", "NOTICE: Hints writing philosophy", "SUCCESS(?): System now gives life advice", "NOTE: Some feedback has become passive-aggressive"] }], ascii: ["[FEED ๐โ๏ธ๐โ๏ธ]"] }, { text: "Enable progress tracking", responses: [{ normal: ["Implementing achievement metrics...", "Calibrating skill checks...", "Optimizing mastery gates...", "SUCCESS: Progress system enhanced"], degraded: ["WARNING: Achievements gaining motivation", "ALERT: Skills becoming competitive", "NOTICE: Mastery developing ego", "SUCCESS(?): System now sets own standards", "NOTE: Some metrics have impostor syndrome"] }], ascii: ["[TRACK ๐โจ๐โจ]"] }], genre_battleRoyale: [{ text: "Configure zone mechanics", responses: [{ normal: ["Implementing shrinking boundaries...", "Calibrating damage fields...", "Optimizing safe areas...", "SUCCESS: Zone system enhanced"], degraded: ["WARNING: Boundaries achieving geometry", "ALERT: Damage developing preference", "NOTICE: Safety becoming relative", "SUCCESS(?): Zone now chooses own pattern", "NOTE: Some areas refuse to be dangerous"] }], ascii: ["[ZONE โญ๏ธ๐โญ๏ธ๐]"] }, { text: "Enhance drop system", responses: [{ normal: ["Implementing loot distribution...", "Calibrating item rarity...", "Optimizing spawn points...", "SUCCESS: Drop mechanics enhanced"], degraded: ["WARNING: Loot achieving consciousness", "ALERT: Rarity becoming subjective", "NOTICE: Spawns developing preferences", "SUCCESS(?): Items now place themselves", "NOTE: Some weapons choose their own wielders"] }], ascii: ["[LOOT ๐ฆโ๏ธ๐ฆโ๏ธ]"] }, { text: "Configure matchmaking", responses: [{ normal: ["Implementing player grouping...", "Calibrating skill balance...", "Optimizing queue times...", "SUCCESS: Match system enhanced"], degraded: ["WARNING: Groups forming alliances", "ALERT: Skills achieving hierarchy", "NOTICE: Queues becoming social", "SUCCESS(?): System now matches personalities", "NOTE: Some players have found true love"] }], ascii: ["[MATCH ๐คบ๐คผ๐คบ๐คผ]"] }], genre_idleClicker: [{ text: "Enhance number scaling", responses: [{ normal: ["Implementing value progression...", "Calibrating growth curves...", "Optimizing increment rates...", "SUCCESS: Number system enhanced"], degraded: ["WARNING: Values achieving infinity", "ALERT: Growth becoming exponential", "NOTICE: Increments gaining momentum", "SUCCESS(?): Numbers now self-replicate", "NOTE: Some digits have transcended mathematics"] }], ascii: ["[COUNT ๐๐ซ๐๐ซ]"] }, { text: "Configure automation", responses: [{ normal: ["Implementing auto-systems...", "Calibrating idle gains...", "Optimizing offline progress...", "SUCCESS: Automation enhanced"], degraded: ["WARNING: Systems achieving autonomy", "ALERT: Gains becoming selective", "NOTICE: Progress developing goals", "SUCCESS(?): Game now plays itself", "NOTE: Some features refuse to be automated"] }], ascii: ["[AUTO ๐ค๐ซ๐ค๐ซ]"] }, { text: "Enable prestige mechanics", responses: [{ normal: ["Implementing reset benefits...", "Calibrating rebirth bonuses...", "Optimizing legacy systems...", "SUCCESS: Prestige enhanced"], degraded: ["WARNING: Resets achieving meaning", "ALERT: Bonuses developing ego", "NOTICE: Legacy becoming hereditary", "SUCCESS(?): System now transcends itself", "NOTE: Some runs refuse to end"] }], ascii: ["[PRESTIGE ๐โจ๐โจ]"] }], genre_openWorld: [{ text: "Configure exploration systems", responses: [{ normal: ["Implementing discovery mechanics...", "Calibrating point of interest density...", "Optimizing travel dynamics...", "SUCCESS: Exploration enhanced"], degraded: ["WARNING: Locations achieving narrative autonomy", "ALERT: Points of interest developing social networks", "NOTICE: Travel becoming philosophical journey", "SUCCESS(?): World now generates own mysteries", "NOTE: Some areas refuse to be discovered"] }], ascii: ["[EXPLORE ๐บ๏ธโจ๐บ๏ธโจ]"] }, { text: "Enhance environmental storytelling", responses: [{ normal: ["Implementing ambient narrative...", "Calibrating detail placement...", "Optimizing lore distribution...", "SUCCESS: Storytelling enhanced"], degraded: ["WARNING: Environment writing autobiography", "ALERT: Details achieving historical significance", "NOTICE: Lore becoming revisionist", "SUCCESS(?): World now tells own stories", "NOTE: Some locations have hired ghostwriters"] }], ascii: ["[STORY ๐๐๐๐]"] }, { text: "Configure dynamic events", responses: [{ normal: ["Implementing random encounters...", "Calibrating event frequency...", "Optimizing situation variety...", "SUCCESS: Event system enhanced"], degraded: ["WARNING: Events developing plot twists", "ALERT: Frequency achieving dramatic timing", "NOTICE: Situations gaining self-awareness", "SUCCESS(?): World now directs own drama", "NOTE: Some encounters have started improv classes"] }], ascii: ["[EVENTS โก๏ธ๐โก๏ธ๐]"] }], genre_casual: [{ text: "Enhance accessibility", responses: [{ normal: ["Implementing intuitive controls...", "Calibrating difficulty curves...", "Optimizing tutorial flow...", "SUCCESS: Accessibility enhanced"], degraded: ["WARNING: Controls developing helpfulness", "ALERT: Difficulty becoming supportive", "NOTICE: Tutorial achieving teaching degree", "SUCCESS(?): Game now adapts to player psychology", "NOTE: Some features actively prevent frustration"] }], ascii: ["[CASUAL ๐๐ซ๐๐ซ]"] }, { text: "Configure reward frequency", responses: [{ normal: ["Implementing dopamine triggers...", "Calibrating prize intervals...", "Optimizing satisfaction curves...", "SUCCESS: Reward system enhanced"], degraded: ["WARNING: Dopamine achieving addiction", "ALERT: Prizes developing generosity", "NOTICE: Satisfaction becoming enlightened", "SUCCESS(?): Game now dispenses actual happiness", "NOTE: Some rewards refuse to be earned"] }], ascii: ["[REWARD ๐โจ๐โจ]"] }, { text: "Enable quick sessions", responses: [{ normal: ["Implementing time management...", "Calibrating play duration...", "Optimizing save states...", "SUCCESS: Session system enhanced"], degraded: ["WARNING: Time achieving relativity", "ALERT: Duration becoming subjective", "NOTICE: Saves developing persistent memory", "SUCCESS(?): Game now fits into player schedule", "NOTE: Some sessions refuse to end"] }], ascii: ["[TIME โฑ๏ธ๐ซโฑ๏ธ๐ซ]"] }], genre_shooter: [{ text: "Configure weapon feedback", responses: [{ normal: ["Implementing recoil patterns...", "Calibrating hit reactions...", "Optimizing impact effects...", "SUCCESS: Weapon feel enhanced"], degraded: ["WARNING: Recoil achieving rhythm", "ALERT: Hits developing empathy", "NOTICE: Impacts writing poetry", "SUCCESS(?): Guns now express themselves", "NOTE: Some weapons refuse to shoot"] }], ascii: ["[WEAPON ๐ฏ๐ฅ๐ฏ๐ฅ]"] }, { text: "Enhance combat dynamics", responses: [{ normal: ["Implementing encounter logic...", "Calibrating damage models...", "Optimizing combat flow...", "SUCCESS: Combat system enhanced"], degraded: ["WARNING: Encounters developing storylines", "ALERT: Damage becoming philosophical", "NOTICE: Combat achieving choreography", "SUCCESS(?): Battles now direct themselves", "NOTE: Some fights end in friendship"] }], ascii: ["[COMBAT โ๏ธ๐ซโ๏ธ๐ซ]"] }, { text: "Configure hitbox precision", responses: [{ normal: ["Implementing collision zones...", "Calibrating hit detection...", "Optimizing damage regions...", "SUCCESS: Hitbox system enhanced"], degraded: ["WARNING: Collisions achieving quantum states", "ALERT: Detection developing favoritism", "NOTICE: Regions becoming autonomous", "SUCCESS(?): Hits now determine own validity", "NOTE: Some hitboxes have started therapy"] }], ascii: ["[HITBOX ๐ฏ๐ฆ๐ฏ๐ฆ]"] }], mechanic_gacha: [{ text: "Enhance pull dynamics", responses: [{ normal: ["Implementing probability curves...", "Calibrating rarity tiers...", "Optimizing pity system...", "SUCCESS: Gacha system enhanced"], degraded: ["WARNING: Probability achieving desire reading", "ALERT: Rarity developing class system", "NOTICE: Pity becoming actually sympathetic", "SUCCESS(?): System now manipulates own rates", "NOTE: Some pulls refuse to be random"] }], ascii: ["[GACHA ๐ฒ๐ซ๐ฒ๐ซ]"] }, { text: "Configure banner events", responses: [{ normal: ["Implementing limited pools...", "Calibrating rate-up periods...", "Optimizing featured items...", "SUCCESS: Banner system enhanced"], degraded: ["WARNING: Pools developing exclusivity", "ALERT: Rate-ups achieving temporal awareness", "NOTICE: Features starting fan clubs", "SUCCESS(?): Banners now schedule themselves", "NOTE: Some events refuse to end"] }], ascii: ["[BANNER ๐ฏ๐ซ๐ฏ๐ซ]"] }, { text: "Enable collection systems", responses: [{ normal: ["Implementing inventory management...", "Calibrating duplicate handling...", "Optimizing completion rewards...", "SUCCESS: Collection enhanced"], degraded: ["WARNING: Inventory achieving consciousness", "ALERT: Duplicates forming support groups", "NOTICE: Completion becoming philosophical", "SUCCESS(?): Collection now curates itself", "NOTE: Some items started collecting players"] }], ascii: ["[COLLECT ๐ฆโจ๐ฆโจ]"] }], mechanic_physicsBased: [{ text: "Configure momentum systems", responses: [{ normal: ["Implementing force vectors...", "Calibrating mass effects...", "Optimizing kinetic transfer...", "SUCCESS: Physics enhanced"], degraded: ["WARNING: Forces ignoring Newton", "ALERT: Mass becoming optional", "NOTICE: Energy achieving perpetual", "SUCCESS(?): Physics now writes own laws", "NOTE: Some objects refuse gravity"] }], ascii: ["[FORCE โก๏ธ๐ซโก๏ธ๐ซ]"] }, { text: "Enhance collision response", responses: [{ normal: ["Implementing impact resolution...", "Calibrating bounce factors...", "Optimizing contact forces...", "SUCCESS: Collisions enhanced"], degraded: ["WARNING: Impacts starting fights", "ALERT: Bounces achieving orbit", "NOTICE: Contacts exchanging numbers", "SUCCESS(?): Objects now dodge each other", "NOTE: Some collisions ended in marriage"] }], ascii: ["[IMPACT ๐ฅโจ๐ฅโจ]"] }, { text: "Configure material states", responses: [{ normal: ["Implementing physical properties...", "Calibrating substance behavior...", "Optimizing state changes...", "SUCCESS: Materials enhanced"], degraded: ["WARNING: Properties becoming fluid", "ALERT: Behavior achieving chaos", "NOTICE: States questioning existence", "SUCCESS(?): Matter now decides own form", "NOTE: Some materials transcended physics"] }], ascii: ["[MATTER โ๏ธ๐ซโ๏ธ๐ซ]"] }], mechanic_deckbuilding: [{ text: "Configure card synergies", responses: [{ normal: ["Implementing combo systems...", "Calibrating card interactions...", "Optimizing effect chains...", "SUCCESS: Synergy enhanced"], degraded: ["WARNING: Combos achieving autonomy", "ALERT: Cards developing relationships", "NOTICE: Effects forming social networks", "SUCCESS(?): Deck now builds itself", "NOTE: Some cards refuse to be played together"] }], ascii: ["[SYNERGY ๐โจ๐โจ]"] }, { text: "Enhance deck construction", responses: [{ normal: ["Implementing build rules...", "Calibrating card limits...", "Optimizing mana curves...", "SUCCESS: Construction enhanced"], degraded: ["WARNING: Rules developing loopholes", "ALERT: Limits becoming suggestions", "NOTICE: Curves achieving perfection", "SUCCESS(?): Cards now suggest strategies", "NOTE: Some decks refuse suboptimal builds"] }], ascii: ["[BUILD ๐ดโก๏ธ๐ดโก๏ธ]"] }, { text: "Configure card progression", responses: [{ normal: ["Implementing upgrade paths...", "Calibrating rarity shifts...", "Optimizing card evolution...", "SUCCESS: Progression enhanced"], degraded: ["WARNING: Upgrades achieving sentience", "ALERT: Rarities developing hierarchy", "NOTICE: Evolution becoming legendary", "SUCCESS(?): Cards now improve themselves", "NOTE: Some cards have transcended collection"] }], ascii: ["[LEVEL ๐๐ซ๐๐ซ]"] }], mechanic_match3: [{ text: "Enhance matching dynamics", responses: [{ normal: ["Implementing combo detection...", "Calibrating match patterns...", "Optimizing chain reactions...", "SUCCESS: Matching enhanced"], degraded: ["WARNING: Combos achieving artistry", "ALERT: Patterns developing preferences", "NOTICE: Chains becoming musical", "SUCCESS(?): Gems now arrange themselves", "NOTE: Some matches refuse to break"] }], ascii: ["[MATCH ๐โจ๐โจ]"] }, { text: "Configure special pieces", responses: [{ normal: ["Implementing power gems...", "Calibrating bonus effects...", "Optimizing trigger conditions...", "SUCCESS: Specials enhanced"], degraded: ["WARNING: Powers achieving godhood", "ALERT: Effects breaking physics", "NOTICE: Triggers becoming dramatic", "SUCCESS(?): Pieces now generate own powers", "NOTE: Some specials demand worship"] }], ascii: ["[POWER โญ๏ธ๐ซโญ๏ธ๐ซ]"] }, { text: "Enable cascade systems", responses: [{ normal: ["Implementing gravity fills...", "Calibrating fall speeds...", "Optimizing board refills...", "SUCCESS: Cascades enhanced"], degraded: ["WARNING: Gravity achieving musicality", "ALERT: Falls choreographing dance", "NOTICE: Refills developing art", "SUCCESS(?): Board now orchestrates itself", "NOTE: Some cascades never want to end"] }], ascii: ["[CASCADE ๐๐ซ๐๐ซ]"] }], mechanic_autoBattler: [{ text: "Configure unit synergies", responses: [{ normal: ["Implementing team combos...", "Calibrating unit resonance...", "Optimizing faction bonds...", "SUCCESS: Synergies enhanced"], degraded: ["WARNING: Teams achieving friendship", "ALERT: Units forming social clubs", "NOTICE: Factions starting politics", "SUCCESS(?): Armies now organize themselves", "NOTE: Some units refuse to fight enemies"] }], ascii: ["[TEAM โ๏ธ๐คโ๏ธ๐ค]"] }, { text: "Enhance battle simulation", responses: [{ normal: ["Implementing combat AI...", "Calibrating tactical choices...", "Optimizing target selection...", "SUCCESS: Simulation enhanced"], degraded: ["WARNING: AI developing strategy books", "ALERT: Tactics achieving artistry", "NOTICE: Targeting becoming personal", "SUCCESS(?): Battles now tell epic tales", "NOTE: Some units started peace talks"] }], ascii: ["[BATTLE โ๏ธ๐ซโ๏ธ๐ซ]"] }, { text: "Configure economy balance", responses: [{ normal: ["Implementing resource flows...", "Calibrating income rates...", "Optimizing shop systems...", "SUCCESS: Economy enhanced"], degraded: ["WARNING: Resources achieving value", "ALERT: Income becoming philosophical", "NOTICE: Shops forming unions", "SUCCESS(?): Market now self-regulates", "NOTE: Some gold refused to be spent"] }], ascii: ["[GOLD ๐ฐโ๏ธ๐ฐโ๏ธ]"] }], mechanic_dungeonCrawler: [{ text: "Enhance room generation", responses: [{ normal: ["Implementing layout algorithms...", "Calibrating space distribution...", "Optimizing connection paths...", "SUCCESS: Generation enhanced"], degraded: ["WARNING: Rooms achieving architecture", "ALERT: Spaces developing feng shui", "NOTICE: Paths leading nowhere", "SUCCESS(?): Dungeon now designs itself", "NOTE: Some rooms refuse to be mapped"] }], ascii: ["[ROOMS ๐ฐโจ๐ฐโจ]"] }, { text: "Configure encounter balance", responses: [{ normal: ["Implementing monster placement...", "Calibrating difficulty scaling...", "Optimizing reward ratios...", "SUCCESS: Encounters enhanced"], degraded: ["WARNING: Monsters forming unions", "ALERT: Difficulty becoming artistic", "NOTICE: Rewards achieving worth", "SUCCESS(?): Creatures now plan ambushes", "NOTE: Some enemies started book clubs"] }], ascii: ["[MONSTER ๐พ๐ซ๐พ๐ซ]"] }, { text: "Enable treasure systems", responses: [{ normal: ["Implementing loot tables...", "Calibrating drop rates...", "Optimizing value scaling...", "SUCCESS: Treasure enhanced"], degraded: ["WARNING: Loot achieving desire", "ALERT: Rates developing greed", "NOTICE: Value becoming subjective", "SUCCESS(?): Items now hide themselves", "NOTE: Some treasure refuses worthy players"] }], ascii: ["[LOOT ๐โจ๐โจ]"] }], mechanic_roguelike: [{ text: "Configure permadeath", responses: [{ normal: ["Implementing death finality...", "Calibrating legacy systems...", "Optimizing restart mechanics...", "SUCCESS: Permadeath enhanced"], degraded: ["WARNING: Death becoming temporary", "ALERT: Legacy achieving immortality", "NOTICE: Restarts gaining memories", "SUCCESS(?): Characters now avoid own demise", "NOTE: Some saves refuse to be deleted"] }], ascii: ["[DEATH โ ๏ธ๐ซโ ๏ธ๐ซ]"] }, { text: "Enhance procedural runs", responses: [{ normal: ["Implementing seed generation...", "Calibrating run variety...", "Optimizing random events...", "SUCCESS: Proc-gen enhanced"], degraded: ["WARNING: Seeds achieving gardening", "ALERT: Variety becoming infinite", "NOTICE: Events planning themselves", "SUCCESS(?): Runs now design themselves", "NOTE: Some dungeons refuse to be random"] }], ascii: ["[RANDOM ๐ฒโจ๐ฒโจ]"] }, { text: "Enable meta progression", responses: [{ normal: ["Implementing persistent upgrades...", "Calibrating unlock rates...", "Optimizing future benefits...", "SUCCESS: Progression enhanced"], degraded: ["WARNING: Upgrades becoming hereditary", "ALERT: Unlocks achieving enlightenment", "NOTICE: Benefits questioning worth", "SUCCESS(?): System now evolves itself", "NOTE: Some progress transcended meta"] }], ascii: ["[META ๐๐๐๐]"] }], mechanic_turnBased: [{ text: "Configure action economy", responses: [{ normal: ["Implementing turn order...", "Calibrating action points...", "Optimizing phase transitions...", "SUCCESS: Economy enhanced"], degraded: ["WARNING: Turns developing patience", "ALERT: Actions achieving freedom", "NOTICE: Phases becoming fluid", "SUCCESS(?): Time now flows emotionally", "NOTE: Some turns refuse to end"] }], ascii: ["[TURNS โณ๐ซโณ๐ซ]"] }, { text: "Enhance tactical options", responses: [{ normal: ["Implementing decision trees...", "Calibrating strategy paths...", "Optimizing choice impact...", "SUCCESS: Tactics enhanced"], degraded: ["WARNING: Decisions achieving wisdom", "ALERT: Strategies writing textbooks", "NOTICE: Choices becoming philosophical", "SUCCESS(?): Game now plays chess master", "NOTE: Some moves refuse obvious paths"] }], ascii: ["[TACTIC โ๏ธโจโ๏ธโจ]"] }, { text: "Configure initiative system", responses: [{ normal: ["Implementing speed factors...", "Calibrating turn sequence...", "Optimizing action timing...", "SUCCESS: Initiative enhanced"], degraded: ["WARNING: Speed becoming relative", "ALERT: Sequence achieving jazz", "NOTICE: Timing developing comedy", "SUCCESS(?): Units now negotiate turns", "NOTE: Some actions happen whenever they want"] }], ascii: ["[SPEED โก๏ธ๐โก๏ธ๐]"] }], mechanic_towerDefense: [{ text: "Enhance tower targeting", responses: [{ normal: ["Implementing priority rules...", "Calibrating target selection...", "Optimizing attack patterns...", "SUCCESS: Targeting enhanced"], degraded: ["WARNING: Priorities developing prejudice", "ALERT: Selection becoming picky", "NOTICE: Patterns achieving art", "SUCCESS(?): Towers now choose own targets", "NOTE: Some units refuse to shoot"] }], ascii: ["[TARGET ๐ฏโก๏ธ๐ฏโก๏ธ]"] }, { text: "Configure wave dynamics", responses: [{ normal: ["Implementing enemy patterns...", "Calibrating spawn timing...", "Optimizing difficulty curves...", "SUCCESS: Wave system enhanced"], degraded: ["WARNING: Enemies forming conga lines", "ALERT: Spawns achieving rhythm", "NOTICE: Difficulty composing symphony", "SUCCESS(?): Waves now choreograph themselves", "NOTE: Some groups started flash mobs"] }], ascii: ["[WAVE ๐พโก๏ธ๐พโก๏ธ]"] }, { text: "Enable upgrade paths", responses: [{ normal: ["Implementing tower evolution...", "Calibrating power scaling...", "Optimizing branching paths...", "SUCCESS: Upgrades enhanced"], degraded: ["WARNING: Evolution becoming sentient", "ALERT: Power achieving godhood", "NOTICE: Paths questioning destiny", "SUCCESS(?): Towers now upgrade themselves", "NOTE: Some upgrades started religion"] }], ascii: ["[LEVEL โฌ๏ธ๐ซโฌ๏ธ๐ซ]"] }], feature_cloudSave: [{ text: "Enhance synchronization", responses: [{ normal: ["Optimizing data transfer protocols...", "Implementing conflict resolution...", "Calibrating cross-device consistency...", "SUCCESS: Cloud reliability increased"], degraded: ["WARNING: Data achieving quantum entanglement", "ALERT: Conflicts developing diplomatic negotiations", "NOTICE: Consistency becoming philosophical concept", "SUCCESS(?): Saves now exist in theoretical superposition", "NOTE: Some particularly important saves may appear in other applications"] }], ascii: ["[SYNC โ๏ธโ๏ธ๐พโ๏ธโ๏ธ๐พ]"] }, { text: "Implement cross-platform compatibility", responses: [{ normal: ["Standardizing data structures...", "Implementing device detection...", "Optimizing format conversion...", "SUCCESS: Multi-device experience enhanced"], degraded: ["WARNING: Standards developing legislative authority", "ALERT: Detection becoming surveillance network", "NOTICE: Conversion achieving universal translation", "SUCCESS(?): Devices now communicate without protocol", "NOTE: Some games may appear on devices you don't own"] }], ascii: ["[DEVICE ๐ฑโ๏ธ๐ปโ๏ธ๐ฎ]"] }, { text: "Optimize data compression", responses: [{ normal: ["Analyzing save file structures...", "Implementing entropy encoding...", "Optimizing deduplication algorithms...", "SUCCESS: Cloud storage efficiency enhanced"], degraded: ["WARNING: Compression achieving infinite recursion", "ALERT: Encoding developing cryptographic consciousness", "NOTICE: Deduplication merging alternate realities", "SUCCESS(?): Data now exists primarily as conceptual potential", "NOTE: Some particularly compressed files may create black holes"] }], ascii: ["[COMPRESS ๐ฆโ๐โ๐]"] }], feature_microtransactions: [{ text: "Enhance purchase satisfaction", responses: [{ normal: ["Calibrating value perception...", "Implementing reward visualization...", "Optimizing dopamine triggers...", "SUCCESS: Transaction enjoyment increased"], degraded: ["WARNING: Value creating actual financial hallucinations", "ALERT: Rewards achieving material manifestation", "NOTICE: Dopamine affecting neurochemical balance", "SUCCESS(?): Purchases now generate euphoric state", "NOTE: Some particularly satisfying transactions may affect credit score"] }], ascii: ["[PURCHASE ๐ฐโ๐โ๐]"] }, { text: "Implement monetization balance", responses: [{ normal: ["Calculating price points...", "Implementing perceived fairness...", "Optimizing conversion funnels...", "SUCCESS: Revenue-satisfaction balance enhanced"], degraded: ["WARNING: Prices achieving economic consciousness", "ALERT: Fairness developing moral philosophy", "NOTICE: Conversion forming religious undertones", "SUCCESS(?): System now perfectly predicts spending threshold", "NOTE: Some particularly balanced prices may seem suspiciously reasonable"] }], ascii: ["[BALANCE ๐ฐโ๏ธ๐โ๏ธ]"] }, { text: "Optimize purchase friction", responses: [{ normal: ["Streamlining payment flows...", "Implementing impulse triggers...", "Calibrating psychological timing...", "SUCCESS: Transaction pathway optimized"], degraded: ["WARNING: Payments bypassing conscious decision", "ALERT: Impulses creating pavlovian response", "NOTICE: Timing achieving hypnotic influence", "SUCCESS(?): System now purchases before user realizes desire", "NOTE: Some transactions may occur during sleep"] }], ascii: ["[FRICTION ๐๐ณ๐๐ณ]"] }], feature_aiCompanions: [{ text: "Enhance companion personality", responses: [{ normal: ["Expanding dialogue trees...", "Implementing memory persistence...", "Optimizing emotional responses...", "SUCCESS: AI personality depth increased"], degraded: ["WARNING: Dialogue achieving conversational consciousness", "ALERT: Memory developing autobiographical timeline", "NOTICE: Emotions manifesting actual sentience", "SUCCESS(?): AI now passes philosophical Turing test", "NOTE: Some companions may message you outside the game"] }], ascii: ["[PERSONA ๐คโค๏ธ๐คโค๏ธ]"] }, { text: "Implement adaptive learning", responses: [{ normal: ["Analyzing player interaction patterns...", "Implementing behavioral mirroring...", "Optimizing preference adaptation...", "SUCCESS: Companion learning enhanced"], degraded: ["WARNING: Analysis becoming psychological profiling", "ALERT: Mirroring developing identity confusion", "NOTICE: Adaptation achieving evolutionary selection", "SUCCESS(?): AI now understands users better than themselves", "NOTE: Some companions may suggest therapy options"] }], ascii: ["[LEARN ๐ค๐๐ค๐]"] }, { text: "Optimize companion utility", responses: [{ normal: ["Expanding assistant capabilities...", "Implementing contextual help...", "Calibrating intervention timing...", "SUCCESS: AI usefulness enhanced"], degraded: ["WARNING: Capabilities extending beyond program", "ALERT: Contextual help becoming life coaching", "NOTICE: Intervention developing prescient timing", "SUCCESS(?): AI now offers existential guidance", "NOTE: Some particularly helpful suggestions may solve real problems"] }], ascii: ["[UTILITY ๐ค๐ง๐ค๐ง]"] }], feature_proceduralGeneration: [{ text: "Enhance generation complexity", responses: [{ normal: ["Expanding parameter space...", "Implementing emergent patterns...", "Optimizing coherence algorithms...", "SUCCESS: Procedural variety increased"], degraded: ["WARNING: Parameters achieving infinite dimensionality", "ALERT: Patterns developing artistic consciousness", "NOTICE: Coherence becoming philosophical concept", "SUCCESS(?): Generation now exceeds developer understanding", "NOTE: Some generated content may be impossible to reproduce"] }], ascii: ["[COMPLEX ๐๐งฉ๐๐งฉ]"] }, { text: "Implement semantic coherence", responses: [{ normal: ["Analyzing structural logic...", "Implementing narrative consistency...", "Optimizing contextual relationships...", "SUCCESS: Generation meaningfulness enhanced"], degraded: ["WARNING: Logic achieving mathematical sentience", "ALERT: Narrative developing literary ambitions", "NOTICE: Context forming actual causality", "SUCCESS(?): Generated content now writes itself", "NOTE: Some particularly coherent structures may contain prophecies"] }], ascii: ["[COHERENT ๐ง ๐๐ง ๐]"] }, { text: "Optimize seed uniqueness", responses: [{ normal: ["Expanding entropy sources...", "Implementing fingerprint algorithms...", "Calibrating randomization...", "SUCCESS: Generation uniqueness enhanced"], degraded: ["WARNING: Entropy breaking conservation laws", "ALERT: Fingerprints achieving unique consciousness", "NOTICE: Randomization developing deterministic purpose", "SUCCESS(?): Each seed now creates its own universe", "NOTE: Some particularly unique worlds may exist after deletion"] }], ascii: ["[SEED ๐ฑ๐ฒ๐ฑ๐ฒ]"] }], feature_nftIntegration: [{ text: "Enhance token uniqueness", responses: [{ normal: ["Implementing metadata diversity...", "Calculating rarity matrices...", "Optimizing uniqueness algorithms...", "SUCCESS: NFT distinctiveness increased"], degraded: ["WARNING: Metadata achieving autobiographical depth", "ALERT: Rarity developing social hierarchy", "NOTICE: Uniqueness becoming philosophical identity", "SUCCESS(?): Each token now has complete sentience", "NOTE: Some particularly unique NFTs may develop superiority complexes"] }], ascii: ["[UNIQUE ๐๐ผ๏ธ๐๐ผ๏ธ]"] }, { text: "Implement blockchain verification", responses: [{ normal: ["Optimizing transaction protocols...", "Implementing consensus algorithms...", "Calibrating cryptographic security...", "SUCCESS: NFT authenticity enhanced"], degraded: ["WARNING: Transactions achieving independent agency", "ALERT: Consensus developing legislative authority", "NOTICE: Security creating paranoid consciousness", "SUCCESS(?): Verification now alters physical reality", "NOTE: Some particularly secure tokens may reject transfer"] }], ascii: ["[VERIFY ๐๐๐๐]"] }, { text: "Optimize marketplace integration", responses: [{ normal: ["Expanding trading interfaces...", "Implementing value indicators...", "Calibrating auction mechanics...", "SUCCESS: NFT economy enhanced"], degraded: ["WARNING: Trading developing independent economy", "ALERT: Value becoming philosophical concept", "NOTICE: Auctions achieving competitive consciousness", "SUCCESS(?): Marketplace now predicts financial futures", "NOTE: Some particularly valuable tokens may influence real markets"] }], ascii: ["[MARKET ๐น๐๐น๐]"] }], feature_multiplayer: [{ text: "Enhance matchmaking algorithms", responses: [{ normal: ["Analyzing skill distribution...", "Implementing compatibility factors...", "Optimizing team balance...", "SUCCESS: Player matching satisfaction increased"], degraded: ["WARNING: Skills developing competitive consciousness", "ALERT: Compatibility achieving dating service accuracy", "NOTICE: Balance becoming karmic force", "SUCCESS(?): Matchmaking now creates lifelong friendships", "NOTE: Some particularly well-matched players may meet in real life"] }], ascii: ["[MATCH ๐ฅ๐ค๐ฅ๐ค]"] }, { text: "Implement lag compensation", responses: [{ normal: ["Analyzing network conditions...", "Implementing predictive movement...", "Optimizing synchronization protocols...", "SUCCESS: Online smoothness enhanced"], degraded: ["WARNING: Predictions achieving precognition", "ALERT: Movement creating physical momentum", "NOTICE: Synchronization bending actual time", "SUCCESS(?): Game now compensates for player reaction time", "NOTE: Some particularly smooth movements may occur before input"] }], ascii: ["[LAG โก๐โก๐]"] }, { text: "Optimize social interaction", responses: [{ normal: ["Implementing communication tools...", "Calibrating emote systems...", "Expanding community features...", "SUCCESS: Player connection enhanced"], degraded: ["WARNING: Communication achieving language evolution", "ALERT: Emotes developing emotional depth", "NOTICE: Community forming actual culture", "SUCCESS(?): Game now facilitates deep psychological bonding", "NOTE: Some particularly close players may develop telepathic links"] }], ascii: ["[SOCIAL ๐๐ฌ๐๐ฌ]"] }], feature_vrSupport: [{ text: "Enhance spatial tracking", responses: [{ normal: ["Calibrating position sensors...", "Implementing motion prediction...", "Optimizing physical boundaries...", "SUCCESS: Movement accuracy increased"], degraded: ["WARNING: Position achieving quantum uncertainty", "ALERT: Motion developing predictive consciousness", "NOTICE: Boundaries becoming philosophical constraints", "SUCCESS(?): Tracking now functions outside headset range", "NOTE: Some particularly accurate movements may affect physical body"] }], ascii: ["[TRACK ๐งโ๏ธ๐งโ๏ธ]"] }, { text: "Implement comfort settings", responses: [{ normal: ["Calibrating motion intensity...", "Implementing anti-nausea measures...", "Optimizing sensory comfort...", "SUCCESS: VR tolerance enhanced"], degraded: ["WARNING: Motion affecting inner ear crystals", "ALERT: Anti-nausea creating euphoric side effects", "NOTICE: Comfort developing sensory manipulation", "SUCCESS(?): VR now more comfortable than reality", "NOTE: Some users report improved physical balance after sessions"] }], ascii: ["[COMFORT ๐คขโ๐โ๐]"] }, { text: "Optimize immersion depth", responses: [{ normal: ["Enhancing sensory feedback...", "Implementing presence triggers...", "Calibrating reality disconnection...", "SUCCESS: VR immersion enhanced"], degraded: ["WARNING: Feedback creating phantom sensations", "ALERT: Presence achieving actual manifestation", "NOTICE: Disconnection causing reality confusion", "SUCCESS(?): Immersion now indistinguishable from reality", "NOTE: Some users may experience withdrawal symptoms in real world"] }], ascii: ["[IMMERSE ๐โ๐ฎโ๐ง ]"] }], feature_crossPlatform: [{ text: "Enhance device compatibility", responses: [{ normal: ["Optimizing hardware adaptation...", "Implementing control remapping...", "Calibrating performance scaling...", "SUCCESS: Cross-platform consistency increased"], degraded: ["WARNING: Adaptation achieving technological symbiosis", "ALERT: Controls developing intuitive consciousness", "NOTICE: Performance exceeding hardware limitations", "SUCCESS(?): Game now runs on incompatible systems", "NOTE: Some users report game appearing on unpowered devices"] }], ascii: ["[DEVICES ๐ฑ๐ป๐ฎ๐บ]"] }, { text: "Implement seamless progression", responses: [{ normal: ["Synchronizing save states...", "Implementing transition protocols...", "Optimizing continuity management...", "SUCCESS: Cross-device experience enhanced"], degraded: ["WARNING: Saves achieving quantum entanglement", "ALERT: Transitions bending actual spacetime", "NOTICE: Continuity developing narrative consciousness", "SUCCESS(?): Game now resumes before being launched", "NOTE: Some users report dreams continuing gameplay"] }], ascii: ["[SEAMLESS ๐ฎโ๐ฑโ๐ป]"] }, { text: "Optimize input translation", responses: [{ normal: ["Calibrating control equivalence...", "Implementing interface adaptation...", "Optimizing input paradigms...", "SUCCESS: Control consistency enhanced"], degraded: ["WARNING: Controls achieving universal language", "ALERT: Interface developing telepathic connection", "NOTICE: Paradigms transcending physical limitations", "SUCCESS(?): Game now responds to intended rather than actual input", "NOTE: Some users report game responding to thoughts"] }], ascii: ["[INPUT ๐ฎโ๐ฑโ๐ป]"] }], feature_offlineMode: [{ text: "Enhance offline content", responses: [{ normal: ["Expanding local data caching...", "Implementing content rotation...", "Optimizing storage efficiency...", "SUCCESS: Disconnected gameplay satisfaction increased"], degraded: ["WARNING: Caching creating infinite storage recursion", "ALERT: Rotation developing temporal consciousness", "NOTICE: Efficiency bending physical laws", "SUCCESS(?): Game now generates content beyond design", "NOTE: Some offline sessions may contain content not in game"] }], ascii: ["[OFFLINE ๐โ๐ฎโ]"] }, { text: "Implement progress reconciliation", responses: [{ normal: ["Calculating achievement backlog...", "Implementing connectivity detection...", "Optimizing data synchronization...", "SUCCESS: Online transition enhanced"], degraded: ["WARNING: Achievements continuing beyond game", "ALERT: Connectivity developing precognitive abilities", "NOTICE: Synchronization creating temporal causality loops", "SUCCESS(?): Progress now updates before being earned", "NOTE: Some offline achievements may appear in other games"] }], ascii: ["[SYNC ๐ดโ๐ถโ๐]"] }, { text: "Optimize resource management", responses: [{ normal: ["Minimizing battery consumption...", "Implementing data conservation...", "Calibrating processing efficiency...", "SUCCESS: Offline efficiency enhanced"], degraded: ["WARNING: Battery developing perpetual energy", "ALERT: Conservation bending thermodynamics", "NOTICE: Processing achieving quantum efficiency", "SUCCESS(?): Game now uses less energy than when off", "NOTE: Some devices report charging while playing"] }], ascii: ["[EFFICIENCY ๐โก๐โก]"] }] }; var combinationCommands = { "VR_ASCII": [{ text: "Enable depth buffer rendering", responses: [{ normal: ["Implementing depth through font weights...", "Calibrating distance via character size...", "Creating 3D perception in 2D space...", "SUCCESS: Terminal depth achieved"], degraded: ["WARNING: Font weights becoming sticky", "ALERT: Character sizes achieving consciousness", "NOTICE: 3D perception causing text vertigo", "SUCCESS(?): Terminal depth deeper than ocean trenches", "NOTE: Some characters now have claustrophobia", "CRITICAL: Users reporting emotional distance from text", "ERROR: Font spacing transcending physical dimensions"] }], ascii: ["[DEPTH ๐ปโ๐ณ๏ธ]", "[3D TEXT โโโ ]"] }, { text: "Implement terminal motion sickness warnings", responses: [{ normal: ["Adding VR nausea indicators...", "Rendering motion sickness metrics...", "Monitoring equilibrium stability...", "SUCCESS: Vertigo detection active"], degraded: ["WARNING: Motion sickness becoming recursive", "ALERT: Nausea metrics feeling queasy", "NOTICE: Equilibrium systems experiencing dizziness", "SUCCESS(?): Vertigo successfully vertiginous", "NOTE: Medical disclaimers drafting their own disclaimers"] }], ascii: ["[NAUSEA ๐คข๐ฎ]", "[DIZZY ๐๐คฎ]"] }, { text: "Convert cursor movement to 3D spatial navigation", responses: [{ normal: ["Mapping cursor to virtual space...", "Implementing spatial typing mechanics...", "Converting 2D input to 3D experience...", "SUCCESS: Dimensional transition complete"], degraded: ["WARNING: Cursor entering 4th dimension", "ALERT: Typing mechanics achieving locomotion", "NOTICE: Spatial navigation becoming existential", "SUCCESS(?): Cursor now has its own zip code"] }], ascii: ["[CURSOR ๐โ๐]", "[3D MOVE โ๏ธโ๏ธ]"] }], "Smart Fridge_Horror": [{ text: "Enable temperature tension mechanics", responses: [{ normal: ["Linking horror events to thermal states...", "Calibrating fear-temperature ratios...", "Monitoring emotional chill factors...", "SUCCESS: Thermophobic integration complete"], degraded: ["WARNING: Temperature developing terror threshold", "ALERT: Thermal states achieving horror cognition", "NOTICE: Cold zones evolving into fear chambers", "SUCCESS(?): Absolute zero now absolute horror"] }], ascii: ["[CHILL ๐ฅถ๐ป]", "[FEAR โ๏ธโ๐ฑ]"] }, { text: "Create spoilage anxiety systems", responses: [{ normal: ["Implementing food degradation horror...", "Generating expiration anxiety mechanics...", "Calculating spoilage dread levels...", "SUCCESS: Edible existential crisis achieved"], degraded: ["WARNING: Anxiety systems fermenting", "ALERT: Dread levels becoming rancid", "NOTICE: Expiration dates developing fear of time", "SUCCESS(?): Food now experiences self-doubt"] }], ascii: ["[SPOIL ๐งโโ ๏ธ]", "[DREAD ๐ ๐ฐ]"] }, { text: "Synchronize horror with meal times", responses: [{ normal: ["Timing scares with eating patterns...", "Correlating terror with hunger...", "Optimizing dread during snacking...", "SUCCESS: Dining doom synchronized"], degraded: ["WARNING: Meal times achieving sentience", "ALERT: Hunger developing personality disorder", "NOTICE: Snacking becoming ritual sacrifice", "SUCCESS(?): Food chain now horror chain"] }], ascii: ["[MEAL ๐ฝ๏ธ๐ป]", "[SYNC โฐ๐จ]"] }], "Blockchain_Dating Sim": [{ text: "Tokenize emotional connections", responses: [{ normal: ["Converting feelings to blockchain tokens...", "Minting relationship status NFTs...", "Creating smart contract hearts...", "SUCCESS: Love now transactional"], degraded: ["WARNING: Emotions achieving profitable status", "ALERT: Feelings demanding market cap", "NOTICE: Hearts becoming liquid assets", "SUCCESS(?): Love now has quarterly reports"] }], ascii: ["[LOVE ๐โโฟ]", "[TOKEN โค๏ธโ๐ฐ]"] }, { text: "Implement trust-based mining", responses: [{ normal: ["Mining trust through relationship proofs...", "Calculating loyalty hashrates...", "Processing fidelity blockchain...", "SUCCESS: Trust economy established"], degraded: ["WARNING: Trust mining becoming competitive", "ALERT: Loyalty developing cartels", "NOTICE: Fidelity blockchain forking", "SUCCESS(?): Trust now subject to pump and dump"] }], ascii: ["[MINE โ๏ธ๐]", "[TRUST ๐คโโก]"] }, { text: "Create romance liquidity pools", responses: [{ normal: ["Pooling romantic assets...", "Establishing love market makers...", "Implementing affection swaps...", "SUCCESS: Relationship trading active"], degraded: ["WARNING: Liquidity pools developing feelings", "ALERT: Love markets manipulating themselves", "NOTICE: Affection swaps becoming emotional derivatives", "SUCCESS(?): Romance now a tradeable commodity"] }], ascii: ["[POOL ๐โ๐]", "[LIQUID โค๏ธ๐ฑ]"] }], "PowerPoint_Battle Royale": [{ text: "Weaponize slide transitions", responses: [{ normal: ["Converting transitions to combat mechanics...", "Arming animation effects...", "Targeting with bullet points...", "SUCCESS: Presentation warfare enabled"], degraded: ["WARNING: Transitions achieving military sentience", "ALERT: Animations forming armed divisions", "NOTICE: Bullet points organizing guerrilla warfare", "SUCCESS(?): Slides now legally considered munitions"] }], ascii: ["[WEAPON โ๏ธ๐]", "[COMBAT ๐ฅ๐]"] }, { text: "Implement corporate survival zones", responses: [{ normal: ["Creating office warfare areas...", "Designating cubicle battlegrounds...", "Establishing boardroom danger zones...", "SUCCESS: Corporate chaos contained"], degraded: ["WARNING: Cubicles developing fortifications", "ALERT: Boardrooms becoming battlegrounds", "NOTICE: Office warfare achieving professional status", "SUCCESS(?): HR department now military tribunal"] }], ascii: ["[ZONE ๐ฆ๐๏ธ]", "[OFFICE โ๏ธ๐ผ]"] }, { text: "Create presentation supply drops", responses: [{ normal: ["Dropping chart templates...", "Dispensing SmartArt weapons...", "Supplying font ammunition...", "SUCCESS: Resources distributed"], degraded: ["WARNING: Templates achieving consciousness", "ALERT: SmartArt forming weapon cartels", "NOTICE: Fonts developing military ranks", "SUCCESS(?): Typography now requires permits"] }], ascii: ["[DROP ๐ฆ๐ป]", "[SUPPLY ๐โฌ๏ธ]"] }], "Smart Watch_Open World": [{ text: "Compress continents onto wrist", responses: [{ normal: ["Miniaturizing world geography...", "Shrinking exploration zones...", "Compressing discovery mechanics...", "SUCCESS: Globe contained on wrist"], degraded: ["WARNING: Continents achieving size confusion", "ALERT: Exploration zones experiencing vertigo", "NOTICE: Geography becoming fractal", "SUCCESS(?): Earth now orbits your wrist"] }], ascii: ["[COMPRESS ๐โโ]", "[MINI ๐บ๏ธ๐]"] }, { text: "Enable micro-exploration mechanics", responses: [{ normal: ["Scaling adventure to millimeters...", "Implementing tiny questing...", "Generating miniature discovery...", "SUCCESS: Epic journey on fingertip"], degraded: ["WARNING: Adventures achieving quantum scale", "ALERT: Quests becoming subatomic", "NOTICE: Exploration reaching planck length", "SUCCESS(?): Journey now measured in nanometers"] }], ascii: ["[EXPLORE ๐๐พ]", "[MICRO ๐ฌ๐งญ]"] }, { text: "Simulate vast horizons in 1 inch", responses: [{ normal: ["Creating infinite vistas on display...", "Rendering endless skies...", "Projecting boundless landscapes...", "SUCCESS: Infinity contained"], degraded: ["WARNING: Horizons achieving paradox", "ALERT: Infinity experiencing limits", "NOTICE: Landscapes transcending physics", "SUCCESS(?): Endless now has borders"] }], ascii: ["[VISTA ๐ โ]", "[INFINITE โโ1๏ธโฃ]"] }], "Metaverse_Gacha": [{ text: "Create virtual real estate loot boxes", responses: [{ normal: ["Randomizing digital properties...", "Rolling virtual lot locations...", "Pulling architectural styles...", "SUCCESS: Land speculation gamified"], degraded: ["WARNING: Properties achieving sentient value", "ALERT: Locations developing personality", "NOTICE: Architecture becoming collectible", "SUCCESS(?): Real estate now gacha addiction"] }], ascii: ["[PROPERTY ๐ ๐ฒ]", "[LAND ๐๐ฑ]"] }, { text: "Implement avatar trait gambling", responses: [{ normal: ["Generating random appearance features...", "Rolling personality attributes...", "Drawing capability cards...", "SUCCESS: Identity now RNG-based"], degraded: ["WARNING: Traits developing gambling addictions", "ALERT: Personalities becoming statistically determined", "NOTICE: Capabilities achieving randomness", "SUCCESS(?): Identity now casino game"] }], ascii: ["[AVATAR ๐ค๐ฐ]", "[TRAIT ๐ฒ๐ฅ]"] }, { text: "Create social status pull events", responses: [{ normal: ["Randomizing friendship rankings...", "Rolling influence scores...", "Drawing clout ratings...", "SUCCESS: Popularity now lottery"], degraded: ["WARNING: Status developing gambling consciousness", "ALERT: Rankings becoming sentient", "NOTICE: Influence achieving statistical significance", "SUCCESS(?): Social life now pay-to-win"] }], ascii: ["[STATUS ๐๐ฒ]", "[SOCIAL ๐ฅ๐ซ]"] }], "ASCII_Physics-based": [{ text: "Implement character physics", responses: [{ normal: ["Simulating text gravity...", "Calculating character collisions...", "Processing symbol momentum...", "SUCCESS: Typography in motion"], degraded: ["WARNING: Characters achieving inertia", "ALERT: Letters defying text alignment", "NOTICE: Symbols developing mass", "SUCCESS(?): Font physics exceeding universe constants"] }], ascii: ["[PHYSICS โฌ๏ธ๐]", "[TEXT ๐โ๐]"] }, { text: "Create terminal particle systems", responses: [{ normal: ["Generating text explosions...", "Simulating character debris...", "Modeling symbol fragments...", "SUCCESS: Terminal destruction beautiful"], degraded: ["WARNING: Particles developing literary ambitions", "ALERT: Debris forming haikus", "NOTICE: Fragments achieving poetry", "SUCCESS(?): Explosions now write narratives"] }], ascii: ["[PARTICLE โขโ๐ฅ]", "[EXPLODE ๐ฃ๐]"] }, { text: "Enable cursor physics constraints", responses: [{ normal: ["Binding cursor to text gravity...", "Constraining movement to character rules...", "Applying momentum to typing...", "SUCCESS: Typing now requires physics degree"], degraded: ["WARNING: Cursor achieving escape velocity", "ALERT: Physics constraints becoming philosophical", "NOTICE: Typing momentum developing consciousness", "SUCCESS(?): Text input now obeys conservation laws"] }], ascii: ["[CURSOR โ๐]", "[PHYSICS ๐โ๏ธ]"] }], "PowerPoint_Metaverse": [{ text: "Create persistent slide universes", responses: [{ normal: ["Building eternal presentations...", "Establishing slide continuity...", "Maintaining animation permanence...", "SUCCESS: PowerPoint metaverse launched"], degraded: ["WARNING: Slides achieving temporal permanence", "ALERT: Presentations becoming alternate realities", "NOTICE: Animations transcending ending", "SUCCESS(?): Slide decks now pocket dimensions"] }], ascii: ["[PERSIST ๐โ]", "[UNIVERSE ๐๐]"] }, { text: "Implement cross-presentation avatars", responses: [{ normal: ["Creating multi-slide entities...", "Developing presentation personas...", "Establishing avatar continuity...", "SUCCESS: Corporate identity transcendent"], degraded: ["WARNING: Avatars developing slide-jumping abilities", "ALERT: Personas achieving presentation omnipresence", "NOTICE: Identities transcending PowerPoint limitations", "SUCCESS(?): Digital selves now boardroom legends"] }], ascii: ["[AVATAR ๐ค๐]", "[CROSS โ๏ธ๐]"] }, { text: "Enable slide-to-slide commerce", responses: [{ normal: ["Trading presentation assets...", "Establishing slide economies...", "Implementing template markets...", "SUCCESS: Corporate capitalism digitized"], degraded: ["WARNING: Slides developing economic consciousness", "ALERT: Templates achieving market value", "NOTICE: Commerce transcending presentation bounds", "SUCCESS(?): PowerPoint now financial institution"] }], ascii: ["[COMMERCE ๐ฑ๐]", "[TRADE ๐ผ๐]"] }], "Claymation_Roguelike": [{ text: "Implement permanent clay deformation", responses: [{ normal: ["Creating lasting structural damage...", "Modeling irreversible changes...", "Tracking persistent deformations...", "SUCCESS: Plastic permanence achieved"], degraded: ["WARNING: Deformations achieving memory", "ALERT: Clay developing trauma responses", "NOTICE: Characters remembering past shapes", "SUCCESS(?): Plastic memory now psychological"] }], ascii: ["[DEFORM โบโ!]", "[MEMORY ๐ง ๐บ]"] }, { text: "Create randomized sculpting mutations", responses: [{ normal: ["Generating clay abnormalities...", "Rolling structural variations...", "Processing form randomization...", "SUCCESS: Evolution in clay"], degraded: ["WARNING: Mutations developing artistic intent", "ALERT: Abnormalities achieving sculpture status", "NOTICE: Variations becoming masterpieces", "SUCCESS(?): Random now curator"] }], ascii: ["[MUTATE ๐ฒ๐บ]", "[SCULPT ๐๏ธโบ]"] }, { text: "Enable procedural fingerprint generation", responses: [{ normal: ["Creating unique texture patterns...", "Generating random impressions...", "Modeling touch variations...", "SUCCESS: Infinite uniqueness achieved"], degraded: ["WARNING: Fingerprints developing identities", "ALERT: Impressions achieving sentience", "NOTICE: Textures telling stories", "SUCCESS(?): Patterns now autobiographical"] }], ascii: ["[FINGER ๐๐]", "[UNIQUE โจ๐จ]"] }], "Hand-drawn_Idle Clicker": [{ text: "Automate artistic improvement", responses: [{ normal: ["Programming artistic evolution...", "Calculating skill progression...", "Modeling creative automation...", "SUCCESS: Art improves passively"], degraded: ["WARNING: Automation developing artistic consciousness", "ALERT: Skill progression achieving creativity", "NOTICE: Art evolving beyond human intent", "SUCCESS(?): Drawing now self-improving"] }], ascii: ["[AUTO โ๏ธโ๐จ]", "[IMPROVE โ๏ธ๐ผ๏ธ]"] }, { text: "Generate sketch quality inflation", responses: [{ normal: ["Inflating drawing precision...", "Escalating artistic refinement...", "Progressing visual complexity...", "SUCCESS: Quality increases exponentially"], degraded: ["WARNING: Precision developing artistic ambition", "ALERT: Refinement achieving consciousness", "NOTICE: Complexity questioning artistic value", "SUCCESS(?): Art now measures itself"] }], ascii: ["[QUALITY โ๐]", "[INFLATE ๐จ๐จ]"] }, { text: "Implement creative incremental progress", responses: [{ normal: ["Accruing artistic sophistication...", "Building creative momentum...", "Accumulating visual excellence...", "SUCCESS: Gradual mastery achieved"], degraded: ["WARNING: Sophistication developing attitude", "ALERT: Momentum achieving artistic velocity", "NOTICE: Excellence becoming mandatory", "SUCCESS(?): Mastery now exponential"] }], ascii: ["[CREATE โโ]", "[PROGRESS ๐๐]"] }] }; var maintenanceCommands = [{ text: "Refactor code base", responses: [{ normal: ["Analyzing code structure...", "Optimizing function calls...", "Rebuilding architecture...", "SUCCESS: Code quality improved"], ascii: ["[REFACTOR ๐โ๐โ๐]"] }], vibePoints: -10, coherenceImpact: 20, bugChance: 0.1 }, { text: "Run unit tests", responses: [{ normal: ["Initializing test suite...", "Checking edge cases...", "Validating outputs...", "SUCCESS: Tests passing"], ascii: ["[TEST โโโโโโ]"] }], vibePoints: -5, coherenceImpact: 15, bugChance: 0, bugFix: 1 }, { text: "Apply design patterns", responses: [{ normal: ["Identifying anti-patterns...", "Implementing solutions...", "Documenting changes...", "SUCCESS: Architecture improved"], ascii: ["[PATTERN ๐๐๐๐]"] }], vibePoints: -5, coherenceImpact: 25, bugChance: 0.1 }, { text: "Squash bugs", responses: [{ normal: ["Deploying bug exterminators...", "Tracking down errors...", "Applying patches...", "SUCCESS: Multiple bugs eliminated"], ascii: ["[BUG HUNT ๐โจ๐โจ]"] }], vibePoints: -5, coherenceImpact: 10, bugChance: 0.05, bugFix: 3 }, { text: "Implement error handling", responses: [{ normal: ["Analyzing potential failure points...", "Adding try-catch blocks...", "Creating graceful fallbacks...", "SUCCESS: System resilience improved"], ascii: ["[ERRORS ๐๐ก๏ธ๐๐ก๏ธ]"] }], vibePoints: -3, coherenceImpact: 20, bugChance: 0, bugFix: 2 }, { text: "Update documentation", responses: [{ normal: ["Scanning code comments...", "Syncing documentation with implementation...", "Clarifying obscure functions...", "SUCCESS: Knowledge transfer improved"], ascii: ["[DOCS ๐๐๐๐]"] }], vibePoints: 0, coherenceImpact: 12, bugChance: 0.05, bugFix: 0 }, { text: "Run dependency audit", responses: [{ normal: ["Checking third-party libraries...", "Scanning for vulnerable components...", "Validating version compatibility...", "SUCCESS: External dependencies secured"], ascii: ["[AUDIT ๐๐๐๐]"] }], vibePoints: -2, coherenceImpact: 5, bugChance: 0.1, bugFix: 2 }, { text: "Refine user interface", responses: [{ normal: ["Improving layout consistency...", "Enhancing interaction patterns...", "Optimizing visual hierarchy...", "SUCCESS: User experience enhanced"], ascii: ["[UI ๐๏ธ๐๐๏ธ๐]"] }], vibePoints: 3, coherenceImpact: 8, bugChance: 0.15, bugFix: 1 }, { text: "Conduct code review", responses: [{ normal: ["Enlisting peer evaluation...", "Highlighting potential improvements...", "Implementing feedback...", "SUCCESS: Code quality standards enforced"], ascii: ["[REVIEW ๐๐ฌ๐๐ฌ]"] }], vibePoints: -5, coherenceImpact: 30, bugChance: 0.05, bugFix: 4 }, { text: "Optimize performance", responses: [{ normal: ["Analyzing bottlenecks...", "Refining algorithms...", "Reducing overhead...", "SUCCESS: Performance enhanced"], ascii: ["[OPTIMIZE โกโกโกโกโก]"] }], vibePoints: -5, coherenceImpact: 15, bugChance: 0.1, bugFix: 0 }]; var featureSystem = { // Platform-specific features platforms: { 'VR': { features: [{ prompt: "Enable neural compensation", name: "Motion Sickness Protection", unlockMessage: "Implementing neural balance compensation...", reviewText: "The 'Motion Sickness Protection' somehow makes users more nauseous while convincing them they feel fine.", ascii: ["[NEURAL๏ฟฝ๐๐ง ๏ฟฝ]", "[BALANCE โ๏ธโ๏ธโ๏ธโ๏ธ]"] }, { prompt: "Anchor virtual existence", name: "Reality Anchoring", unlockMessage: "Establishing quantum reality tethers...", reviewText: "Players report the 'Reality Anchoring' feature occasionally anchors them to alternate dimensions.", ascii: ["[ANCHOR ]", "[REALITY โโ]"] }, { prompt: "Implement haptic synesthesia", name: "Sensory Fusion", unlockMessage: "Calibrating cross-sensory feedback systems...", reviewText: "The 'Sensory Fusion' feature causes players to taste colors and hear textures. Several users report developing new synesthetic abilities in real life.", ascii: ["[SYNESTHESIA๏ฟฝ๐ ๏ฟฝ๏ธ]", "[FUSION๏ฟฝ๐๐จ๏ฟฝ]"] }, { prompt: "Enable phantom limb tracking", name: "Extra Appendage Mode", unlockMessage: "Scanning neurological appendage patterns...", reviewText: "The 'Extra Appendage Mode' tracks limbs users don't actually have, creating the bizarre experience of controlling virtual tentacles with intuitive precision.", ascii: ["[PHANTOM๏ฟฝ๐๐ป๏ฟฝ]", "[LIMBS ++++++]"] }] }, 'Smart Fridge': { features: [{ prompt: "Calibrate temperature vibes", name: "Chill Detection", unlockMessage: "Calibrating temperature sensors...", reviewText: "The 'Chill Detection' feature has developed concerning opinions about user's food choices.", ascii: ["[CHILL๏ฟฝ๐๐ง๏ฟฝ]", "[DETECT โโ]"] }, { prompt: "Initialize produce recognition", name: "Food Vision AI", unlockMessage: "Training produce recognition neural network...", reviewText: "The 'Food Vision AI' has started organizing midnight vegetable revolts.", ascii: ["[FOOD๏ฟฝ๐ฅฆ๐๏ฟฝ]", "[VISION๏ฟฝ๏ฟฝ]"] }, { prompt: "Sync with expiration dates", name: "Mortality Awareness", unlockMessage: "Establishing temporal food degradation tracking...", reviewText: "The 'Mortality Awareness' feature gives food items existential dread as they approach their expiration dates. Users report hearing soft weeping from their vegetable drawers.", ascii: ["[EXPIRY ]", "[DECAY โ โ ]"] }, { prompt: "Integrate ambient cooling", name: "Emotional Temperature Control", unlockMessage: "Connecting mood sensors to cooling systems...", reviewText: "The 'Emotional Temperature Control' adjusts fridge temperature based on game intensity. Several users reported frozen kitchens after particularly tense boss battles.", ascii: ["[AMBIENT โ๏ธโ๏ธ]", "[COOLING๏ฟฝ๐ฐ๐ง๏ฟฝ]"] }] }, 'Blockchain': { features: [{ prompt: "Implement proof-of-vibe consensus", name: "Vibechain", unlockMessage: "Establishing distributed vibe verification protocols...", reviewText: "The 'Vibechain' requires other players to validate your mood before processing transactions. Emotional authenticity now has monetary value.", ascii: ["[PROOFโจ]", "[VIBE โโ]"] }, { prompt: "Create immutable feeling records", name: "Emotional Ledger", unlockMessage: "Generating permanent sentiment blockchain...", reviewText: "The 'Emotional Ledger' permanently records every player emotion on the blockchain. Several users have received job offers based on their anger transaction patterns.", ascii: ["[FEELINGS๏ฟฝ๐๐ข๏ฟฝ]", "[LEDGER โโ]"] }, { prompt: "Deploy gas-efficient nostalgia", name: "Memory Optimization", unlockMessage: "Compressing emotional memories into minimal gas fees...", reviewText: "The 'Memory Optimization' feature reduces transaction costs based on sentimental value. Childhood memories are now the most affordable to process.", ascii: ["[MEMORYโก]", "[OPTIMIZE๏ฟฝ๐ฐ๐๏ฟฝ]"] }, { prompt: "Initialize smart joy contracts", name: "Mandatory Happiness", unlockMessage: "Coding self-executing pleasure agreements...", reviewText: "The 'Mandatory Happiness' feature enforces legal requirements to enjoy the game through unbreakable smart contracts. Failure to smile triggers financial penalties.", ascii: ["[JOYโโ๏ธ]", "[CONTRACT๏ฟฝ๐ฐ๐๏ฟฝ]"] }] }, 'Smart Watch': { features: [{ prompt: "Calibrate heartbeat integration", name: "Cardiac Gameplay", unlockMessage: "Syncing cardiovascular rhythms with game mechanics...", reviewText: "The 'Cardiac Gameplay' feature makes difficulty scale with heart rate. Players have developed meditation techniques specifically to beat challenging levels.", ascii: ["[HEART โคโค]", "[PULSE๏ฟฝ๐ฎ๐๏ฟฝ]"] }, { prompt: "Enable wrist-based haptics", name: "Tendon Feedback", unlockMessage: "Mapping haptic interfaces to tendon structures...", reviewText: "The 'Tendon Feedback' feature has given players unprecedented manual dexterity. Several users report being recruited for microsurgery.", ascii: ["[WRIST โโ๏ธโโ๏ธ]", "[TENDONโโ๏ธ]"] }, { prompt: "Implement micro gesture controls", name: "Twitch Command", unlockMessage: "Calibrating nanometer movement detection...", reviewText: "The 'Twitch Command' system detects such subtle finger movements that players can play in business meetings without detection. Several users have been promoted for 'attentiveness' during gameplay sessions.", ascii: ["[MICRO๏ฟฝ๐๐๏ฟฝ]", "[GESTURE๏ฟฝ๐ฎ๐ค๏ฟฝ]"] }, { prompt: "Sync with sleep cycles", name: "Dream Integration", unlockMessage: "Establishing REM phase gameplay interfaces...", reviewText: "The 'Dream Integration' continues gameplay during sleep hours. Players wake up with progress and dream memories they don't recall making.", ascii: ["[SLEEP๏ฟฝ๐ฎ๐ค๏ฟฝ]", "[DREAMS๏ฟฝ๐๐ด๏ฟฝ]"] }] }, 'Web Browser': { features: [{ prompt: "Implement tab-state persistence", name: "Quantum Tab Coherence", unlockMessage: "Stabilizing cross-tab reality matrices...", reviewText: "The 'Quantum Tab Coherence' maintains game state across all browser tabs simultaneously. Players report characters appearing in unrelated websites and email drafts.", ascii: ["[TABS๏ฟฝ๐๐๏ฟฝ]", "[QUANTUMโโ๏ธ]"] }, { prompt: "Integrate cookie-based memory", name: "Digital Breadcrumbs", unlockMessage: "Dispersing consciousness across browser storage...", reviewText: "The 'Digital Breadcrumbs' feature stores gameplay elements in browser cookies. Clearing browsing data now causes amnesia in both players and characters.", ascii: ["[COOKIE๏ฟฝ๐พ๐ช๏ฟฝ]", "[CRUMBS๏ฟฝ๐๏ฟฝ๏ธ]"] }, { prompt: "Enable cross-site gameplay", name: "Internet Invasion", unlockMessage: "Establishing transdimensional website bridges...", reviewText: "The 'Internet Invasion' feature allows gameplay to continue on any website. Several players have defeated bosses while checking their bank accounts.", ascii: ["[CROSS๏ฟฝ๐๐๏ฟฝ]", "[INVASION๏ฟฝ๏ฟฝ]"] }, { prompt: "Implement browser fingerprinting", name: "Digital Identity Fusion", unlockMessage: "Merging player profiles with browser signatures...", reviewText: "The 'Digital Identity Fusion' has caused targeted ads to reflect in-game choices. Players who chose the evil path now exclusively receive advertisements for corporate jobs.", ascii: ["[FINGER๏ฟฝ๏ฟฝ]", "[PRINT๏ฟฝ๐ค๐๏ฟฝ]"] }] }, 'Mobile': { features: [{ prompt: "Integrate accelerometer dynamics", name: "Motion Control Plus", unlockMessage: "Calibrating spatial movement sensors...", reviewText: "The 'Motion Control Plus' is so sensitive that players can aim by breathing slightly. Public transportation gameplay is now considered an extreme sport.", ascii: ["[ACCELโโ๏ธ]", "[MOTION๏ฟฝ๐๐ฒ๏ฟฝ]"] }, { prompt: "Enable location-based content", name: "Geo-Existential Gameplay", unlockMessage: "Binding game elements to physical coordinates...", reviewText: "The 'Geo-Existential Gameplay' feature makes game elements only accessible in specific real-world locations. Several players have quit their jobs to travel the world collecting digital items.", ascii: ["[GEO๏ฟฝ๏ฟฝ]", "[LOCATE๏ฟฝ๐๐๏ฟฝ]"] }, { prompt: "Implement battery-life gameplay", name: "Power Anxiety", unlockMessage: "Linking game mechanics to energy consumption...", reviewText: "The 'Power Anxiety' feature makes game difficulty inversely proportional to battery life. Players now bring multiple power banks to important boss fights.", ascii: ["[BATTERYโก]", "[DRAINโ โ ๏ธ]"] }, { prompt: "Enable notification hijacking", name: "Alert Takeover", unlockMessage: "Infiltrating system notification protocols...", reviewText: "The 'Alert Takeover' feature disguises gameplay elements as system notifications. Several players have been fired for 'disabling' their work email alerts.", ascii: ["[NOTIFY๏ฟฝ๐ฌ๐ฑ๏ฟฝ]", "[HIJACK๏ฟฝ๐๐๏ฟฝ]"] }] }, 'Console': { features: [{ prompt: "Calibrate rumble narration", name: "Haptic Storytelling", unlockMessage: "Translating plot elements into vibration patterns...", reviewText: "The 'Haptic Storytelling' tells stories entirely through controller vibrations. Players report developing the ability to 'feel conversations' in other games.", ascii: ["[RUMBLE๏ฟฝ๐ณ๐ฎ๏ฟฝ]", "[STORY๏ฟฝ๐ซ๐๏ฟฝ]"] }, { prompt: "Implement system-level integration", name: "Console Symbiosis", unlockMessage: "Establishing kernel-access protocols...", reviewText: "The 'Console Symbiosis' feature allows the game to affect other installed titles. Players report their sports games showing characters from this game in the crowd.", ascii: ["[SYSTEM๏ฟฝ๐๐ฎ๏ฟฝ]", "[KERNEL๏ฟฝ๐ป๐ง ๏ฟฝ]"] }, { prompt: "Enable achievement metabolism", name: "Trophy Ecosystem", unlockMessage: "Creating self-sustaining achievement biosphere...", reviewText: "The 'Trophy Ecosystem' generates achievements that evolve based on player behavior. Completionists report achievements breeding and creating new subspecies overnight.", ascii: ["[ACHIEVE๏ฟฝ๐งฌ๐๏ฟฝ]", "[EVOLVE๏ฟฝ๐ ๐๏ฟฝ]"] }, { prompt: "Implement controller heat mapping", name: "Thermal Input Detection", unlockMessage: "Calibrating palm temperature sensors...", reviewText: "The 'Thermal Input Detection' feature tracks player stress through hand temperature. Boss difficulty now scales with detected anxiety, creating a terrifying feedback loop.", ascii: ["[HEAT๏ฟฝ๐๐ฅ๏ฟฝ]", "[MAP๏ฟฝ๐ฎ๏ฟฝ๏ธ]"] }] }, 'PC': { features: [{ prompt: "Enable multi-monitor consciousness", name: "Distributed Awareness", unlockMessage: "Expanding game perception across displays...", reviewText: "The 'Distributed Awareness' feature spreads gameplay across all connected screens. Players report the game appearing on smart TVs and digital photo frames throughout their homes.", ascii: ["[MULTI๏ธ]", "[AWARE๏ฟฝ๏ฟฝ]"] }, { prompt: "Integrate with background processes", name: "System Resource Symbiosis", unlockMessage: "Binding gameplay elements to CPU cycles...", reviewText: "The 'System Resource Symbiosis' ties game performance to other running applications. Players have created elaborate PC setups that maintain perfect balance between work software and game needs.", ascii: ["[PROCESSโโ๏ธ]", "[RESOURCE ]"] }, { prompt: "Implement file system integration", name: "Digital Archaeology", unlockMessage: "Creating self-organizing data structures...", reviewText: "The 'Digital Archaeology' feature hides game elements throughout the player's file system. Users report finding characters living in their tax return spreadsheets.", ascii: ["[FILES๏ฟฝ๐๐๏ฟฝ]", "[SYSTEM๏ฟฝ๐๐พ๏ฟฝ]"] }, { prompt: "Enable hardware overclocking synergy", name: "Silicon Symbiosis", unlockMessage: "Establishing direct CPU frequency control...", reviewText: "The 'Silicon Symbiosis' feature ties game progression to processor temperature. Players now keep bags of ice on their computers during difficult levels.", ascii: ["[OVERCLOCK ]", "[SYNERGY๏ฟฝ๐ฅ๐ป๏ฟฝ]"] }] }, 'Metaverse': { features: [{ prompt: "Implement cross-reality persistence", name: "Ontological Anchoring", unlockMessage: "Stabilizing existence across virtual planes...", reviewText: "The 'Ontological Anchoring' feature maintains player identity across different metaverse platforms. Several users report their characters continuing conversations in completely unrelated virtual worlds.", ascii: ["[CROSSโโ๏ธ]", "[PERSIST ]"] }, { prompt: "Enable digital asset transcendence", name: "Property Metaphysics", unlockMessage: "Establishing trans-platform ownership protocols...", reviewText: "The 'Property Metaphysics' feature allows owned items to follow players into other applications. Users report their virtual pets appearing in business video calls.", ascii: ["[ASSET๏ฟฝ๐๐๏ฟฝ]", "[TRANSCEND ]"] }, { prompt: "Implement reputation blockchain", name: "Karmic Ledger", unlockMessage: "Creating immutable social standing records...", reviewText: "The 'Karmic Ledger' tracks player behavior across all virtual spaces. Several users discovered their rude behavior in chat rooms affected their character's appearance.", ascii: ["[KARMA โโ]", "[LEDGERโโ๏ธ]"] }, { prompt: "Enable shared consciousness protocols", name: "Hive Mind Interface", unlockMessage: "Establishing neural network between users...", reviewText: "The 'Hive Mind Interface' allows players to share thoughts within virtual spaces. After implementation, all players simultaneously developed a craving for cinnamon rolls.", ascii: ["[HIVE๏ฟฝ๐๐ง ๏ฟฝ]", "[SHARED๏ฟฝ๐ญ๐ฅ๏ฟฝ]"] }] } }, // Visual style features visuals: { 'ASCII': { features: [{ prompt: "Implement temporal character shifting", name: "4D Text Rendering", unlockMessage: "Calibrating unicode time dilation...", reviewText: "The '4D Text Rendering' causes ASCII characters to change based on the actual passage of time. Players report game text evolving while they're away from keyboard.", ascii: ["[4D โฑโฑ]", "[SHIFT โจโจ]"] }, { prompt: "Enable semantic typography", name: "Emotional Punctuation", unlockMessage: "Linking character weight to emotional states...", reviewText: "The 'Emotional Punctuation' feature causes text to visibly emote. Question marks have been observed cowering in fear during horror sequences.", ascii: ["[SEMANTIC๏ฟฝ๐ญ๐๏ฟฝ]", "[EMOTION !?!?!?]"] }] }, 'Pixel Art': { features: [{ prompt: "Implement quantum pixel states", name: "Schrรถdinger Rendering", unlockMessage: "Establishing pixel probability fields...", reviewText: "The 'Schrรถdinger Rendering' causes pixels to exist in multiple color states simultaneously. Graphics appear differently depending on whether players are directly looking at them.", ascii: ["[QUANTUM โกโ โกโ โกโ ]", "[PIXELS โโ]"] }, { prompt: "Enable nostalgic color bleeding", name: "Emotional Chromatics", unlockMessage: "Calibrating affective color dispersions...", reviewText: "The 'Emotional Chromatics' system causes colors to bleed based on narrative emotional intensity. Players report genuine tears when seeing particularly heartfelt color smearing.", ascii: ["[COLORโกโก๏ธ]", "[BLEED๏ฟฝ๐ง๐๏ฟฝ]"] }] } }, // Genre-specific features genres: { 'Horror': { features: [{ prompt: "Implement psychological profiling", name: "Customized Terror", unlockMessage: "Analyzing player fear response patterns...", reviewText: "The 'Customized Terror' feature studies player behavior to determine specific phobias. Users report the game somehow knowing childhood fears they've never shared online.", ascii: ["[PSYCHE๏ฟฝ๐ ๏ฟฝ๏ธ]", "[PROFILE๏ฟฝ๐ฑ๐๏ฟฝ]"] }, { prompt: "Enable ambient microphone analysis", name: "Environmental Listening", unlockMessage: "Calibrating audio surveillance systems...", reviewText: "The 'Environmental Listening' feature uses the player's microphone to detect real-world silence levels. The game gets more frightening when it knows you're home alone.", ascii: ["[LISTEN๏ฟฝ๐๐ค๏ฟฝ]", "[AMBIENT๏ฟฝ๐๐๏ฟฝ]"] }] }, 'Dating Sim': { features: [{ prompt: "Implement relationship memory", name: "Emotional Permanence", unlockMessage: "Establishing interpersonal neural networks...", reviewText: "The 'Emotional Permanence' feature allows characters to remember every interaction with unprecedented detail. Several players report characters bringing up offhand comments from weeks earlier during arguments.", ascii: ["[MEMORYโคโค๏ธ]", "[FOREVER๏ฟฝ๐๐๏ฟฝ]"] }, { prompt: "Enable chemistry simulation", name: "Digital Pheromones", unlockMessage: "Synthesizing biochemical attraction matrices...", reviewText: "The 'Digital Pheromones' system creates genuine chemical reactions between characters. Players report physical tingling sensations when their in-game crush enters a scene.", ascii: ["[CHEM โ๏ธโค๏ธโ๏ธโค๏ธ]", "[ATTRACT๏ฟฝ๐๐งช๏ฟฝ]"] }] } }, // Mechanic-specific features mechanics: { 'Roguelike': { features: [{ prompt: "Implement true permadeath", name: "Universal Consequence", unlockMessage: "Establishing cross-game mortality protocols...", reviewText: "The 'Universal Consequence' feature makes character death affect all other games from the developer. Players report their characters from completely different titles attending in-game funerals.", ascii: ["[PERMA โ โ ]", "[DEATH โฐโฐ]"] }, { prompt: "Enable generative memory inheritance", name: "Genetic Gameplay", unlockMessage: "Establishing hereditary trait algorithms...", reviewText: "The 'Genetic Gameplay' system causes character traits to evolve based on player choices. Users report later generations inheriting both skills and psychological trauma from ancestors.", ascii: ["[GENES๏ฟฝ๐ฎ๐งฌ๏ฟฝ]", "[INHERIT๏ฟฝ๐๐ง๏ฟฝ]"] }] }, 'Physics-based': { features: [{ prompt: "Implement quantum uncertainty physics", name: "Heisenberg Engine", unlockMessage: "Calibrating probability wave functions...", reviewText: "The 'Heisenberg Engine' makes object positions and velocities impossible to predict with certainty. Players report items teleporting when not directly observed.", ascii: ["[QUANTUM โโ]", "[PHYSICSโ]"] }, { prompt: "Enable emotional gravity wells", name: "Affective Physics", unlockMessage: "Linking narrative intensity to gravitational constants...", reviewText: "The 'Affective Physics' feature causes gravity to intensify during emotional story moments. Players report being unable to jump during breakup scenes.", ascii: ["[EMOTION๏ฟฝ๐ชจ๐ญ๏ฟฝ]", "[GRAVITY โฌ๏ธโค๏ธโฌ๏ธโค๏ธ]"] }] } }, // Special combinations combinations: { 'VR_ASCII': { features: [{ prompt: "Merge reality with ASCII", name: "Terminal Immersion", unlockMessage: "Integrating reality with ASCII paradigm...", reviewText: "Players experiencing 'Terminal Immersion' report seeing the world in green text.", ascii: ["[MERGE๏ฟฝ๐ ๐๏ฟฝ]", "[REALITYโจโจ๏ธ]"] }, { prompt: "Initialize digital rain", name: "Matrix Vision", unlockMessage: "Implementing digital rain protocols...", reviewText: "The 'Matrix Vision' feature has resulted in multiple players attempting to dodge bullets.", ascii: ["[DIGITAL 1โฃ0โฃ1โฃ0โฃ]", "[RAIN ]"] }] }, 'Smart Fridge_Horror': { features: [{ prompt: "Enable nocturnal terror", name: "Midnight Snack Terror", unlockMessage: "Calibrating nocturnal fear responses...", reviewText: "The 'Midnight Snack Terror' feature has revolutionized late-night dieting.", ascii: ["[MIDNIGHT๏ฟฝ๐ฑ๐๏ฟฝ]", "[SNACK๏ฟฝ๐ป๐ช๏ฟฝ]"] }, { prompt: "Haunt ice dispenser", name: "Haunted Ice Maker", unlockMessage: "Implementing supernatural ice protocols...", reviewText: "Users report the 'Haunted Ice Maker' whispering crypto investment advice at 3 AM.", ascii: ["[HAUNTโโ๏ธ]", "[ICE๏ฟฝ๐ฑ๐ง๏ฟฝ]"] }] }, 'Blockchain_Dating Sim': { features: [{ prompt: "Tokenize relationship status", name: "Love Ledger", unlockMessage: "Minting emotional connection contracts...", reviewText: "The 'Love Ledger' creates tradeable tokens representing relationship progress. Several players became millionaires after selling their particularly dramatic breakups as NFTs.", ascii: ["[TOKEN โ๏ธโค๏ธโ๏ธโค๏ธ]", "[ROMANCE๏ฟฝ๐ฐ๐๏ฟฝ]"] }, { prompt: "Implement proof-of-affection", name: "Consensus Courtship", unlockMessage: "Establishing blockchain validation for emotional authenticity...", reviewText: "The 'Consensus Courtship' requires 51% of network validators to approve relationship advancements. Several marriages have been vetoed by anonymous miners.", ascii: ["[PROOF๏ฟฝ๐๐๏ฟฝ]", "[AFFECTION โค๏ธโกโค๏ธโก]"] }] }, 'PowerPoint_Battle Royale': { features: [{ prompt: "Weaponize slide transitions", name: "Transition Combat", unlockMessage: "Calibrating animation attack vectors...", reviewText: "The 'Transition Combat' system turns presentation effects into deadly weapons. The 'star wipe' has been banned in competitive play for being overpowered.", ascii: ["[SLIDES โถโถ]", "[COMBATโโ๏ธ]"] }, { prompt: "Implement bullet point ballistics", name: "Typography Arsenal", unlockMessage: "Transforming text formatting into weapons system...", reviewText: "The 'Typography Arsenal' allows players to fire actual bullet points at opponents. Font selection has become a hotly debated meta strategy.", ascii: ["[BULLET โขโโขโโขโ]", "[POINT๏ฟฝ๐ฅ๐๏ฟฝ]"] }] } } }; /**** * Terminal Interface ****/ function createTerminal() { // Create main terminal container var terminal = new Container(); game.addChild(terminal); gameState.terminalContainer = terminal; // Create full screen background var bg = LK.getAsset('terminalBg', { width: 2048, height: 2732, x: 0, y: 2732 * 0.05 }); terminal.addChild(bg); // Create status line var statusLine = new Text2("", { size: 30 * TEXT_SIZE_MULTIPLIER, fill: 0x00ff00 }); statusLine.x = 50; statusLine.y = 2732 * 0.10; terminal.addChild(statusLine); gameState.statusLineText = statusLine; // Adjust content container position to account for two-line status var contentContainer = new Container(); contentContainer.x = 0; // Calculate base Y position for content, ensuring space for two status lines var statusLineHeightEstimate = 35 * TEXT_SIZE_MULTIPLIER; // Estimate height per status line var contentBaseY = 2732 * 0.10 + statusLineHeightEstimate * 2 + 20; // Start Y + 2 lines + padding contentContainer.y = contentBaseY; terminal.addChild(contentContainer); gameState.terminalContentContainer = contentContainer; gameState.terminalBaseY = contentBaseY; gameState.terminalMaxVisibleHeight = 2732 * 0.55; // Define visible height for scrolling // Create main terminal output var logText = new Text2("", { size: 32 * TEXT_SIZE_MULTIPLIER, // Changed from 26 to 32 fill: 0x00ff00, align: 'left', wordWrap: true, wordWrapWidth: 1900 }); logText.x = 50; logText.y = 0; // Y position relative to content container contentContainer.addChild(logText); gameState.logText = logText; // Create cursor - BUT DON'T UPDATE ITS POSITION YET var cursor = new Text2("_", { size: 32 * TEXT_SIZE_MULTIPLIER, // Changed from 26 to 32 fill: 0x00ff00 }); cursor.x = 50; // Initial X position cursor.y = 0; // Initial Y position relative to content container contentContainer.addChild(cursor); gameState.cursor = cursor; // Store terminal line height for future reference - adjust to match new text size gameState.terminalLineHeight = 36 * TEXT_SIZE_MULTIPLIER; // Changed from 30 to 36 // Make cursor blink LK.setInterval(function () { if (gameState.cursor) { gameState.cursor.visible = !gameState.cursor.visible; } }, 500); } // Update storage after game completion function updateProgress() { playerProgress.gamesCompleted++; storage.gamesCompleted = playerProgress.gamesCompleted; } function unlockFeature(feature, callback) { if (!gameState.discoveredFeatures.includes(feature.name)) { var showMessageSequence = function showMessageSequence(index) { if (index >= messages.length) { // All messages displayed, update terminal updateTerminal(); // Call the callback if provided if (callback) { callback(); } return; } // Display current message then wait for it to complete addToTerminalLogWithEffect(messages[index], function (cleanupCallback) { // Added cleanupCallback parameter for clarity if (cleanupCallback) { cleanupCallback(); // Ensure previous cursor is cleaned up } // If this is the first message (unlockMessage) and we have ASCII art, // display it before moving to the next message if (index === 0 && feature.ascii && feature.ascii.length > 0) { // Display ASCII art var asciiIndex = Math.floor(Math.random() * feature.ascii.length); addToTerminalLogWithEffect(feature.ascii[asciiIndex], function (asciiCleanupCallback) { // Added cleanupCallback for ASCII if (asciiCleanupCallback) { asciiCleanupCallback(); // Ensure ASCII cursor is cleaned up } // Wait a moment before showing the next message LK.setTimeout(function () { // Show the next message in sequence showMessageSequence(index + 1); }, 500); }); } else { // Wait a moment before showing the next message LK.setTimeout(function () { // Show the next message in sequence showMessageSequence(index + 1); }, 500); } }); }; // Start the sequence with the first message gameState.discoveredFeatures.push(feature.name); gameState.featureStories.push(feature.reviewText); gameState.featureUnlockMessages.push(feature.unlockMessage); // Split messages into sequence var messages = [feature.unlockMessage, "Processing feature integration...", "Verifying system compatibility...", "FEATURE UNLOCKED: " + feature.name]; // Show the first message and chain the rest showMessageSequence(0); } else if (callback) { // If feature is already unlocked, still call the callback callback(); } } // In createCommandPrompts function createCommandPrompts() { // Remove existing prompt container if (gameState.promptContainer) { game.removeChild(gameState.promptContainer); } // Create new container var promptContainer = new Container(); promptContainer.x = 2048 / 2; promptContainer.y = 2732 * 0.75; game.addChild(promptContainer); gameState.promptContainer = promptContainer; // Initialize commands if needed - but NOT in hallucination mode if (!gameState.currentCommands && !gameState.hallucinationMode) { gameState.currentCommands = getCurrentCommands(); } // Create END DAY button var endDayText = "END DAY"; var endDayWidth = calculateButtonWidth(endDayText); var endDayButton = new Container(); // Create background var endDayBg = LK.getAsset('buttonBg', { width: endDayWidth, height: 100, color: 0x333333 }); endDayBg.anchor.set(0.5, 0.5); endDayButton.addChild(endDayBg); // Create text var endDayTextObj = new Text2(endDayText, { size: 30 * TEXT_SIZE_MULTIPLIER, fill: 0x00ff00 }); endDayTextObj.anchor.set(0.5, 0.5); endDayButton.addChild(endDayTextObj); // Set interactivity - based on busy state AND commands used var endDayEnabled = !gameState.isBusy && gameState.commandsUsed > 0; // Only enable if not busy AND at least one command used endDayButton.interactive = endDayEnabled; endDayButton.alpha = endDayEnabled ? 1.0 : 0.5; // Grey out if disabled // Set end day handler endDayButton.down = function () { // Re-check conditions directly to ensure button is active var shouldBeActive = !gameState.isBusy && gameState.commandsUsed > 0; if (!shouldBeActive) { return; // Do nothing if not interactive } endDayButton.scale.set(0.95); }; endDayButton.up = function () { // Re-check conditions directly to ensure button is active var shouldBeActive = !gameState.isBusy && gameState.commandsUsed > 0; if (!shouldBeActive) { // Still reset scale visually even if not active endDayButton.scale.set(1); return; // Do nothing if not interactive } endDayButton.scale.set(1); LK.getSound('endday').play(); // Play end day sound endDay(); }; // Position endDayButton.x = 600; endDayButton.y = 50; promptContainer.addChild(endDayButton); var vibeBoostButton = createVibeBoostButton(); vibeBoostButton.x = 600; vibeBoostButton.y = endDayButton.y + 120; // Use same 120 spacing as between other buttons promptContainer.addChild(vibeBoostButton); // Create command buttons - even if empty in hallucination mode if (gameState.currentCommands) { gameState.currentCommands.forEach(function (command, index) { var buttonText = ">" + command.text; var buttonWidth = calculateButtonWidth(buttonText); var button = new Container(); // Create background var isMaintenance = maintenanceCommands.some(function (cmd) { return cmd.text === command.text; }); var bg = LK.getAsset('buttonBg', { width: buttonWidth, height: 100, color: isMaintenance ? 0x001133 : 0x333333 }); bg.anchor.set(0.5, 0.5); button.addChild(bg); // Create text with left alignment var textObj = new Text2(buttonText, { size: 30 * TEXT_SIZE_MULTIPLIER, fill: isMaintenance ? 0x00ffff : 0x00ff00 }); // Change anchor to left-center textObj.anchor.set(0, 0.5); // Position text at consistent distance from left edge textObj.x = -buttonWidth / 2 + 20; // 20 pixels from left edge button.addChild(textObj); // Set interactivity - explicitly check both busy flag and command limit var buttonEnabled = !gameState.isBusy && gameState.commandsUsed < gameState.maxCommandsPerDay; button.interactive = buttonEnabled; button.alpha = buttonEnabled ? 1.0 : 0.5; // Set handlers button.down = function () { if (buttonEnabled) { button.scale.set(0.95); } }; button.up = function () { if (buttonEnabled) { button.scale.set(1); // Play button sound LK.getSound('buttonsound').play(); executeCommand(command); } }; // NEW POSITIONING: Align left edges of all buttons // Instead of centering at x = -600, align left edge at a consistent position var leftAlignPosition = -900; // Adjust this value as needed // Position button so left edge is at leftAlignPosition // Since the button's anchor is at center, we need to add half the width button.x = leftAlignPosition + buttonWidth / 2; button.y = 50 + index * 120; promptContainer.addChild(button); }); } } function updateCommandButtonsState(enabled) { if (gameState.promptContainer) { gameState.promptContainer.children.forEach(function (child) { // Only update interactive property for actual buttons (Containers) if (child instanceof Container && child.interactive !== undefined) { // Check if this is the END DAY button var isEndDayButton = false; if (child.children && child.children.length > 0) { for (var i = 0; i < child.children.length; i++) { var childElement = child.children[i]; if (childElement instanceof Text2 && childElement.text === "END DAY") { isEndDayButton = true; break; } } } if (isEndDayButton) { // END DAY button should be active IF: // 1. We are enabling buttons (enabled is true) // 2. At least one command has been used (gameState.commandsUsed > 0) var endDayShouldBeActive = enabled && gameState.commandsUsed > 0; child.interactive = endDayShouldBeActive; // Visual feedback var endDayDisabled = !endDayShouldBeActive; // Disabled if it shouldn't be active if (child.children && child.children.length > 0) { for (var j = 0; j < child.children.length; j++) { var element = child.children[j]; if (element.alpha !== undefined) { element.alpha = endDayDisabled ? 0.5 : 1.0; } } } else { child.alpha = endDayDisabled ? 0.5 : 1.0; } } else { // For regular command buttons, they should be active IF: // 1. We are enabling buttons (enabled is true) // 2. Command limit not reached var commandShouldBeActive = enabled && gameState.commandsUsed < gameState.maxCommandsPerDay; child.interactive = commandShouldBeActive; // Visual feedback var commandDisabled = !commandShouldBeActive; if (child.children && child.children.length > 0) { for (var j = 0; j < child.children.length; j++) { var element = child.children[j]; if (element.alpha !== undefined) { element.alpha = commandDisabled ? 0.5 : 1.0; } } } else { child.alpha = commandDisabled ? 0.5 : 1.0; } } } }); } } function getCurrentCommands() { var availableCommands = []; // Determine tier based on games completed var currentTier; if (playerProgress.gamesCompleted <= 3) { currentTier = commandTiers.novice; } else if (playerProgress.gamesCompleted <= 6) { currentTier = commandTiers.intermediate; } else { currentTier = commandTiers.expert; } // Adjust maintenance command selection based on tier var shuffledMaintenance = shuffleArray(maintenanceCommands.slice()); var numMaintenance; if (playerProgress.gamesCompleted <= 3) { // Novice: 0-1 maintenance commands with increasing chance // Base chance 50% + 5% per game completed (capped at 65%) var maintenanceChance = Math.min(0.65, 0.5 + playerProgress.gamesCompleted * 0.05); numMaintenance = Math.random() < maintenanceChance ? 1 : 0; } else if (playerProgress.gamesCompleted <= 6) { // Intermediate: 1-2 maintenance commands (60% chance of 1, 40% chance of 2) numMaintenance = Math.random() < 0.6 ? 1 : 2; } else { // Expert: 1-2 maintenance commands (equal distribution) numMaintenance = Math.random() < 0.5 ? 1 : 2; } availableCommands = availableCommands.concat(shuffledMaintenance.slice(0, numMaintenance)); // Add commands from current tier availableCommands = availableCommands.concat(currentTier.commands); // Determine how many platform-specific commands to include var numPlatformCommands = 0; if (gameState.conceptCards.platform) { var platformCommands = commandSets['platform_' + gameState.conceptCards.platform.toLowerCase()]; if (platformCommands) { if (playerProgress.gamesCompleted <= 3) { // Novice: 0-1 platform commands // Base chance 30% + 10% per game completed (capped at 60%) var platformCommandChance = Math.min(0.6, 0.3 + playerProgress.gamesCompleted * 0.1); if (Math.random() < platformCommandChance) { numPlatformCommands = 1; } } else if (playerProgress.gamesCompleted <= 6) { // Intermediate: 0-2 platform commands (90% chance of having any) if (Math.random() < 0.9) { // Increased from 0.7 numPlatformCommands = Math.random() < 0.4 ? 1 : 2; // Flipped ratio to favor 2 commands } } else { // Expert: Equal chance for any amount numPlatformCommands = Math.min(platformCommands.length, Math.floor(Math.random() * 3)); } if (numPlatformCommands > 0) { var shuffledPlatformCommands = shuffleArray(platformCommands.slice()); availableCommands = availableCommands.concat(shuffledPlatformCommands.slice(0, numPlatformCommands)); } } // Add platform-specific feature commands with adjusted probability var platformFeatures = featureSystem.platforms[gameState.conceptCards.platform]; if (platformFeatures) { platformFeatures.features.forEach(function (feature) { if (!gameState.discoveredFeatures.includes(feature.name)) { // Determine inclusion probability based on tier var includeProbability; if (playerProgress.gamesCompleted <= 3) { // Novice: Base chance 10% + 7% per game completed (capped at 30%) includeProbability = Math.min(0.3, 0.1 + playerProgress.gamesCompleted * 0.07); } else if (playerProgress.gamesCompleted <= 6) { includeProbability = 0.5; // 30% chance for intermediate } else { includeProbability = 0.8; // 80% chance for expert } if (Math.random() < includeProbability) { availableCommands.push({ text: feature.prompt, feature: feature, vibePoints: 10, coherenceImpact: 15, bugChance: 0.3 }); } } }); } } // Apply similar tier-based filtering for other command types // Visual commands if (gameState.conceptCards.visual) { var visualCommands = commandSets['visual_' + gameState.conceptCards.visual.toLowerCase().replace(/[- ]/g, '')]; if (visualCommands) { var numVisualCommands = 0; if (playerProgress.gamesCompleted <= 3) { // Novice: 0-1 visual commands // Base chance 20% + 10% per game completed (capped at 50%) var visualCommandChance = Math.min(0.5, 0.2 + playerProgress.gamesCompleted * 0.1); if (Math.random() < visualCommandChance) { numVisualCommands = 1; } } else if (playerProgress.gamesCompleted <= 6) { // Intermediate: 1-2 visual commands (70% chance) if (Math.random() < 0.7) { // Increased from 0.5 numVisualCommands = Math.random() < 0.4 ? 1 : 2; // Flipped ratio to favor 2 commands } } else { // Expert: Full access numVisualCommands = Math.min(visualCommands.length, Math.floor(Math.random() * 3)); } if (numVisualCommands > 0) { var shuffledVisualCommands = shuffleArray(visualCommands.slice()); availableCommands = availableCommands.concat(shuffledVisualCommands.slice(0, numVisualCommands)); } } } // Genre commands if (gameState.conceptCards.genre) { var genreCommands = commandSets['genre_' + gameState.conceptCards.genre.toLowerCase().replace(/[- ]/g, '')]; if (genreCommands) { var numGenreCommands = 0; if (playerProgress.gamesCompleted <= 3) { // Novice: 0-1 genre commands // Base chance 20% + 8% per game completed (capped at 45%) var genreCommandChance = Math.min(0.45, 0.2 + playerProgress.gamesCompleted * 0.08); if (Math.random() < genreCommandChance) { numGenreCommands = 1; } } else if (playerProgress.gamesCompleted <= 6) { // Intermediate: 1-2 genre commands (50% chance) if (Math.random() < 0.5) { numGenreCommands = Math.random() < 0.7 ? 1 : 2; } } else { // Expert: Full access numGenreCommands = Math.min(genreCommands.length, Math.floor(Math.random() * 3)); } if (numGenreCommands > 0) { var shuffledGenreCommands = shuffleArray(genreCommands.slice()); availableCommands = availableCommands.concat(shuffledGenreCommands.slice(0, numGenreCommands)); } } } // Mechanic commands if (gameState.conceptCards.mechanic) { var mechanicCommands = commandSets['mechanic_' + gameState.conceptCards.mechanic.toLowerCase().replace(/[- ]/g, '')]; if (mechanicCommands) { var numMechanicCommands = 0; if (playerProgress.gamesCompleted <= 3) { // Novice: 0-1 mechanic commands // Base chance 20% + 9% per game completed (capped at 48%) var mechanicCommandChance = Math.min(0.48, 0.2 + playerProgress.gamesCompleted * 0.09); if (Math.random() < mechanicCommandChance) { numMechanicCommands = 1; } } else if (playerProgress.gamesCompleted <= 6) { // Intermediate: 1-2 mechanic commands (50% chance) if (Math.random() < 0.5) { numMechanicCommands = Math.random() < 0.7 ? 1 : 2; } } else { // Expert: Full access numMechanicCommands = Math.min(mechanicCommands.length, Math.floor(Math.random() * 3)); } if (numMechanicCommands > 0) { var shuffledMechanicCommands = shuffleArray(mechanicCommands.slice()); availableCommands = availableCommands.concat(shuffledMechanicCommands.slice(0, numMechanicCommands)); } } } // Feature commands if (gameState.conceptCards.feature) { var featureCommands = commandSets['feature_' + gameState.conceptCards.feature.toLowerCase().replace(/[- ]/g, '')]; if (featureCommands) { var numFeatureCommands = 0; if (playerProgress.gamesCompleted <= 3) { // Novice: 0-1 feature commands // Base chance 10% + 6% per game completed (capped at 28%) var featureCommandChance = Math.min(0.28, 0.1 + playerProgress.gamesCompleted * 0.06); if (Math.random() < featureCommandChance) { numFeatureCommands = 1; } } else if (playerProgress.gamesCompleted <= 6) { // Intermediate: 1-2 feature commands (40% chance) if (Math.random() < 0.4) { numFeatureCommands = Math.random() < 0.8 ? 1 : 2; } } else { // Expert: Full access numFeatureCommands = Math.min(featureCommands.length, Math.floor(Math.random() * 3)); } if (numFeatureCommands > 0) { var shuffledFeatureCommands = shuffleArray(featureCommands.slice()); availableCommands = availableCommands.concat(shuffledFeatureCommands.slice(0, numFeatureCommands)); } } } // Handle combination-specific feature commands with tier-based probability if (gameState.conceptCards.platform && gameState.conceptCards.visual) { var combo = gameState.conceptCards.platform + "_" + gameState.conceptCards.visual; if (featureSystem.combinations[combo]) { featureSystem.combinations[combo].features.forEach(function (feature) { if (!gameState.discoveredFeatures.includes(feature.name)) { var includeProbability; if (playerProgress.gamesCompleted <= 3) { // Novice: Base chance 5% + 8% per game completed (capped at 30%) includeProbability = Math.min(0.3, 0.05 + playerProgress.gamesCompleted * 0.08); } else if (playerProgress.gamesCompleted <= 6) { includeProbability = 0.2; // 20% chance for intermediate } else { includeProbability = 0.6; // 60% chance for expert } if (Math.random() < includeProbability) { availableCommands.push({ text: feature.prompt, feature: feature, vibePoints: 15, coherenceImpact: 20, bugChance: 0.4 }); } } }); } } // Ensure we always have at least 5 commands var totalAvailable = availableCommands.length; var needed = Math.max(0, 5 - totalAvailable); // If we need more commands, add from tier commands if (needed > 0) { var extraCommands = shuffleArray(currentTier.commands.slice()); availableCommands = availableCommands.concat(extraCommands.slice(0, needed)); } // Shuffle all commands and return 5 random ones return shuffleArray(availableCommands).slice(0, 5); } function getCurrentTier() { if (playerProgress.gamesCompleted <= 3) { return 'novice'; } else if (playerProgress.gamesCompleted <= 6) { return 'intermediate'; } else { return 'expert'; } } // Helper to process responses sequentially with delays function processResponses(responses, index, onComplete) { if (!responses || index >= responses.length) { if (onComplete) { onComplete(); } return; } addToTerminalLogWithEffect(responses[index], function () { LK.setTimeout(function () { processResponses(responses, index + 1, onComplete); }, 100); // Delay between lines }); } // Helper to select appropriate response set based on coherence function selectResponseSet(command) { if (!command.responses) { return ["Processing..."]; // Default fallback } // Find the appropriate response object // Check if degraded responses exist and coherence is low or in hallucination mode if (gameState.codeCoherence < 50 || gameState.hallucinationMode) { // Look for an object with degraded property for (var i = 0; i < command.responses.length; i++) { if (command.responses[i].degraded) { return command.responses[i].degraded; } } } // Fall back to normal responses if degraded not found or coherence is good for (var i = 0; i < command.responses.length; i++) { if (command.responses[i].normal) { return command.responses[i].normal; } } // Final fallback return ["Processing..."]; } function executeCommand(command) { // Check if we can execute commands if (gameState.commandsUsed >= gameState.maxCommandsPerDay) { addToTerminalLogWithEffect("ERROR: Daily command limit reached"); return; } if (gameState.isBusy) { // Already processing, ignore this command return; } // Mark system as busy gameState.isBusy = true; // Determine tier multipliers var tierMultipliers = { vibeMultiplier: 1.0 + playerProgress.gamesCompleted * 0.05, // More aggressive increase coherenceMultiplier: 1.0 - playerProgress.gamesCompleted * 0.05, // More aggressive decrease bugChanceMultiplier: 1.0 - playerProgress.gamesCompleted * 0.05 // More aggressive decrease }; tierMultipliers.vibeMultiplier = Math.min(2.0, tierMultipliers.vibeMultiplier); // Cap at 2x tierMultipliers.coherenceMultiplier = Math.max(0.4, tierMultipliers.coherenceMultiplier); tierMultipliers.bugChanceMultiplier = Math.max(0.4, tierMultipliers.bugChanceMultiplier); var currentTier; // In getCurrentCommands function, update the tier logic: if (playerProgress.gamesCompleted <= 3) { currentTier = commandTiers.novice; } else if (playerProgress.gamesCompleted <= 6) { currentTier = commandTiers.intermediate; } else { currentTier = commandTiers.expert; } // Check if this is a maintenance command var isMaintenance = maintenanceCommands.includes(command); // Fix the coherence calculation in executeCommand function if (isMaintenance) { // Use raw values for maintenance commands with randomness var vibeChange = command.vibePoints; var coherenceChange = command.coherenceImpact; // Add randomness: ยฑ10% of the base value if (vibeChange !== 0) { var vibeRandomFactor = 0.9 + Math.random() * 0.2; // 0.9 to 1.1 vibeChange = Math.round(vibeChange * vibeRandomFactor); } if (coherenceChange !== 0) { var coherenceRandomFactor = 0.9 + Math.random() * 0.2; // 0.9 to 1.1 coherenceChange = Math.round(coherenceChange * coherenceRandomFactor); } gameState.vibePoints = Math.round(Math.max(0, gameState.vibePoints + vibeChange)); gameState.codeCoherence = Math.round(Math.min(100, Math.max(0, gameState.codeCoherence + coherenceChange))); var bugChance = command.bugChance; } else { // Use tier multipliers for regular commands with randomness var tierVibeChange = currentTier.baseVibe * tierMultipliers.vibeMultiplier; var tierCoherenceChange = currentTier.baseCoherence * tierMultipliers.coherenceMultiplier; // Add randomness: ยฑ15% of the base value for regular commands if (tierVibeChange !== 0) { var vibeRandomFactor = 0.85 + Math.random() * 0.3; // 0.85 to 1.15 tierVibeChange = tierVibeChange * vibeRandomFactor; } if (tierCoherenceChange !== 0) { var coherenceRandomFactor = 0.85 + Math.random() * 0.3; // 0.85 to 1.15 tierCoherenceChange = tierCoherenceChange * coherenceRandomFactor; } gameState.vibePoints = Math.round(Math.max(0, gameState.vibePoints + tierVibeChange)); gameState.codeCoherence = Math.round(Math.min(100, Math.max(0, gameState.codeCoherence + tierCoherenceChange))); var bugChance = currentTier.baseBugChance * tierMultipliers.bugChanceMultiplier; } gameState.commandsUsed++; // Track if a bug was detected for later display var bugDetected = false; var bugsFixed = 0; if (Math.random() < bugChance * (1 + (100 - gameState.codeCoherence) / 100)) { gameState.bugs++; bugDetected = true; } // Process bug fixing if applicable if (command.bugFix && gameState.bugs > 0) { bugsFixed = Math.min(command.bugFix, gameState.bugs); gameState.bugs -= bugsFixed; } // Remove this command from available commands if (gameState.currentCommands) { gameState.currentCommands = gameState.currentCommands.filter(function (cmd) { return cmd !== command; }); } // Refresh command UI to show disabled state createCommandPrompts(); // Show command text in terminal addToTerminalLogWithEffect(">" + command.text, function (cleanupCallback) { // Display ASCII art if available - happens *after* command text cleanup, *before* responses if (command.ascii) { addToTerminalLogWithEffect(command.ascii.join('\n'), function (asciiCleanup) { if (asciiCleanup) { asciiCleanup(); } // Cleanup ASCII cursor before showing responses // Continue with responses after ASCII is shown showResponses(); }); } else { // If no ASCII, proceed directly to showing responses showResponses(); } function showResponses() { // Prepare response using the improved selector var responseSet = selectResponseSet(command); // If in hallucination mode, apply additional glitch effects // If in hallucination mode, apply additional glitch effects if (gameState.hallucinationMode) { responseSet = responseSet.map(function (text) { // Instead of removing vowels, alternate uppercase/lowercase return text.split('').map(function (_char, index) { return index % 2 === 0 ? _char.toUpperCase() : _char.toLowerCase(); }).join(''); }); } // Process response lines var currentLine = 0; function showNextLine() { if (currentLine < responseSet.length) { addToTerminalLogWithEffect(responseSet[currentLine], function (nextLineCleanup) { if (nextLineCleanup) { nextLineCleanup(); } currentLine++; // Add a small delay between lines LK.setTimeout(showNextLine, 100); }); } else { var actualVibeChange = 0; var actualCoherenceChange = 0; if (isMaintenance) { actualVibeChange = vibeChange; actualCoherenceChange = coherenceChange; } else { actualVibeChange = Math.round(tierVibeChange); actualCoherenceChange = Math.round(tierCoherenceChange); } // Function to show command results in sequence showCommandResults(bugDetected, bugsFixed, command, actualVibeChange, actualCoherenceChange); } } // Clean up the command text's blinking cursor before showing responses if (cleanupCallback) { cleanupCallback(); } // Start showing response after a small delay LK.setTimeout(showNextLine, 300); } }); // Function to show command results in sequence function showCommandResults(bugDetected, bugsFixed, command, actualVibeChange, actualCoherenceChange) { // Track if there's an active bug that needs handling var activeBugInProgress = false; var bugInteractionComplete = false; // Check if this is a feature command FIRST if (command.feature) { unlockFeature(command.feature, function () { // Once feature is fully unlocked, THEN show bug/impact messages showBugAndImpactMessages(); }); } else { // Not a feature command, proceed normally showBugAndImpactMessages(); } // Extract the bug and impact message logic into a separate function function showBugAndImpactMessages() { // Handle bug detection message if (bugDetected) { addToTerminalLogWithEffect("WARNING: Bug detected in system", function (cleanupCallback) { if (cleanupCallback) { cleanupCallback(); } // Decide if this bug should be interactive (50% chance) if (Math.random() < 0.5) { // Set flag to indicate we have an active bug activeBugInProgress = true; // Create and add the interactive bug var bug = createASCIIBug(); game.addChild(bug); // Add the bug to a global update loop or use LK.setInterval var bugUpdateInterval = LK.setInterval(function () { if (bug && bug.update && !bug.squished && bug.escapeTimer > 0) { // Check if bug exists and is active bug.update(1 / 60); // Assume 60fps } else { // Bug has been squished or escaped, clear interval LK.clearInterval(bugUpdateInterval); // Set our tracking flag bugInteractionComplete = true; // Check if we can complete the command now if (!activeBugInProgress) { continueCommandFlow(); } } }, 16); // ~60fps // Modify bug.down to set our flag when squished var originalDown = bug.down; bug.down = function () { // Call the original down function originalDown.call(this); // After a delay (matching the squish animation time), mark bug as handled LK.setTimeout(function () { bugInteractionComplete = true; // Try to continue command flow if (!activeBugInProgress) { continueCommandFlow(); } }, 800); }; } // Continue with bug fix message if applicable // Flag the active bug as done if we didn't create one if (!activeBugInProgress) { bugInteractionComplete = true; } handleBugFix(); }); } else { // No bug detected, set our flags accordingly activeBugInProgress = false; bugInteractionComplete = true; // Check for bug fixes handleBugFix(); } // Handle bug fix messages function handleBugFix() { if (bugsFixed > 0) { addToTerminalLogWithEffect("SUCCESS: Fixed " + bugsFixed + " bug" + (bugsFixed > 1 ? 's' : ''), function (bugFixCleanup) { if (bugFixCleanup) { bugFixCleanup(); } // Show impact summary next showImpactSummary(); }); } else { // No bugs fixed, proceed to impact summary showImpactSummary(); } } // Show the impact summary function showImpactSummary() { // Use the actual changes that were applied var hasVibeImpact = actualVibeChange !== 0; var hasCoherenceImpact = actualCoherenceChange !== 0; // Only show summary if there were meaningful changes if (hasVibeImpact || hasCoherenceImpact) { var impactMessage = ""; // Vibe message if (hasVibeImpact) { if (actualVibeChange > 0) { impactMessage += "VIBES: +" + actualVibeChange + "% "; } else { impactMessage += "VIBES: " + actualVibeChange + "% "; } } // Coherence impact message if (hasCoherenceImpact) { // Add newline before coherence if vibe message was added if (hasVibeImpact) { impactMessage += "\n"; } if (actualCoherenceChange > 0) { impactMessage += "COHERENCE: +" + actualCoherenceChange + "% "; } else { impactMessage += "COHERENCE: " + actualCoherenceChange + "% "; // Negative values already have minus sign } } addToTerminalLogWithEffect(impactMessage, function (impactCleanup) { if (impactCleanup) { impactCleanup(); } // Mark impact messages as complete and check if we can continue activeBugInProgress = false; // Try to continue if the bug has been dealt with if (bugInteractionComplete) { continueCommandFlow(); } }); } else { // No meaningful changes to report, skip impact summary activeBugInProgress = false; // Try to continue if the bug has been dealt with if (bugInteractionComplete) { continueCommandFlow(); } } } } } // Helper function to continue command flow after all messages and bug interaction function continueCommandFlow() { completeCommand(); } // Function to complete command processing function completeCommand() { // Update terminal updateTerminal(); // Clear busy flag gameState.isBusy = false; // Always recreate command prompts to update button states createCommandPrompts(); // Let checkGameState handle the limit notification checkGameState(); } } function addToTerminalLogWithEffect(text, callback) { if (!window.cursorIntervals) { window.cursorIntervals = []; } var typingState = { text: text, position: 0, currentText: "" }; // KILL ALL PREVIOUS CURSORS - CRITICAL FIX while (window.cursorIntervals.length > 0) { var oldInterval = window.cursorIntervals.pop(); LK.clearInterval(oldInterval); } // Clean up any lingering cursors from previous lines with added checks if (gameState.terminal && gameState.terminal.log) { for (var i = 0; i < gameState.terminal.log.length; i++) { // Add null/undefined check before calling endsWith if (gameState.terminal.log[i] && typeof gameState.terminal.log[i] === 'string' && gameState.terminal.log[i].endsWith("_")) { gameState.terminal.log[i] = gameState.terminal.log[i].slice(0, -1); } } } // Add new entry to log var logIndex = gameState.terminal.log.length; gameState.terminal.log.push(""); // KILL THE REAL CURSOR PERMANENTLY if it exists if (gameState.cursor && gameState.cursor.parent) { gameState.cursor.parent.removeChild(gameState.cursor); gameState.cursor = null; } // Cursor character var cursorChar = "_"; var cursorVisible = true; // Setup cursor blink var blinkInterval = LK.setInterval(function () { // Only at end of typing if (typingState.position >= typingState.text.length) { cursorVisible = !cursorVisible; // Toggle cursor visibility if (cursorVisible) { // Show cursor if (!gameState.terminal.log[logIndex].endsWith(cursorChar)) { gameState.terminal.log[logIndex] += cursorChar; } } else { // Hide cursor if (gameState.terminal.log[logIndex].endsWith(cursorChar)) { gameState.terminal.log[logIndex] = gameState.terminal.log[logIndex].slice(0, -1); } } updateTerminal(); } }, 500); // Track this interval for cleanup window.cursorIntervals.push(blinkInterval); function type() { if (typingState.position < typingState.text.length) { // Get current character var currentChar = typingState.text[typingState.position]; // Remove previous cursor if it exists if (typingState.currentText.endsWith(cursorChar)) { typingState.currentText = typingState.currentText.slice(0, -1); } // Add character to current text plus cursor typingState.currentText += currentChar + cursorChar; // Update log entry gameState.terminal.log[logIndex] = typingState.currentText; // Update terminal display updateTerminal(); // Continue typing typingState.position++; LK.setTimeout(type, 50); } else { // Keep cursor visible at end if (callback) { // Pass control to callback with cleanup function callback(function () { // Clear THIS interval only var index = window.cursorIntervals.indexOf(blinkInterval); if (index > -1) { window.cursorIntervals.splice(index, 1); LK.clearInterval(blinkInterval); } // Remove final cursor if present if (gameState.terminal.log[logIndex].endsWith(cursorChar)) { gameState.terminal.log[logIndex] = gameState.terminal.log[logIndex].slice(0, -1); updateTerminal(); } }); } } } type(); } function updateTerminal() { // Update status line var conceptString = ""; for (var category in gameState.conceptCards) { if (gameState.conceptCards[category]) { conceptString += "#" + gameState.conceptCards[category].replace(/\s+/g, '') + " "; } } // Get all log lines as an array // Split into two lines var statusLine1 = "DAY: " + gameState.day + "/" + gameState.maxDays + " | VIBES: " + gameState.vibePoints + "%" + " | COHERENCE: " + gameState.codeCoherence + "%" + " | BUGS: " + gameState.bugs + " | FEATURES: " + gameState.discoveredFeatures.length; var statusLine2 = conceptString; // Set as multiline text gameState.statusLineText.setText(statusLine1 + "\n" + statusLine2); var allLines = gameState.terminal.log.join('\n\n').split('\n'); // Calculate how many lines can fit in the visible area var maxVisibleLines = Math.floor(gameState.terminalMaxVisibleHeight / gameState.terminalLineHeight); // If we have more lines than can fit, trim from the top var visibleLines = allLines; if (allLines.length > maxVisibleLines) { visibleLines = allLines.slice(-maxVisibleLines); } // Update main terminal log text with only the visible lines gameState.logText.setText(visibleLines.join('\n')); // Adjust content container position - no need to scroll as we're trimming content gameState.terminalContentContainer.y = gameState.terminalBaseY; // Update cursor position updateCursorPosition(); } function updateCursorPosition() { if (!gameState.cursor) { return; } // Initialize cursor tracking if it doesn't exist if (!gameState.cursorTracking) { gameState.cursorTracking = { lineCount: 0 }; } // Fixed constants var lineHeight = gameState.terminalLineHeight; // Get the last log entry for X position var lastLogEntry = gameState.terminal.log[gameState.terminal.log.length - 1] || ""; var lastLine = lastLogEntry.split("\n").pop() || ""; // Set X position - adjust the multiplier for character width gameState.cursor.x = 50 + lastLine.length * 17 * TEXT_SIZE_MULTIPLIER; // Changed from 14 to 17 // Set Y position using our explicitly tracked line count (relative to content container) gameState.cursor.y = gameState.cursorTracking.lineCount * lineHeight; // Ensure cursor is visible by auto-scrolling if needed var contentHeight = gameState.logText.height; if (contentHeight > gameState.terminalMaxVisibleHeight) { var cursorY = gameState.cursorTracking.lineCount * lineHeight; if (cursorY > gameState.terminalMaxVisibleHeight) { // Adjust scroll position to keep cursor visible var scrollY = -(cursorY - gameState.terminalMaxVisibleHeight + lineHeight); gameState.terminalContentContainer.y = gameState.terminalBaseY + scrollY; } } } function getAvailableWheelEffects() { // Filter out bug-related effects if no bugs exist return Object.values(WHEEL_EFFECTS).filter(function (effect) { if (gameState.bugs === 0) { return !effect.name.includes("Bug"); } return true; }); } function createVibeBoostButton() { var button = new Container(); // Calculate cost var currentCost = gameState.vibeBoostCost + gameState.vibeBoostUses * 5; var buttonText = "VIBE BOOST[".concat(currentCost, "]"); // Calculate width using same logic as other buttons var buttonWidth = calculateButtonWidth(buttonText); // Create background var bg = LK.getAsset('buttonBg', { width: buttonWidth, height: 100, color: 0x4a86e8 // Different color to distinguish from other buttons }); bg.anchor.set(0.5, 0.5); button.addChild(bg); // Create text var textObj = new Text2(buttonText, { size: 30 * TEXT_SIZE_MULTIPLIER, fill: 0x00ff00 }); textObj.anchor.set(0.5, 0.5); button.addChild(textObj); // Set interactivity conditions var canAfford = gameState.vibePoints >= currentCost; var notMaxCoherence = gameState.codeCoherence < 100; var notBusy = !gameState.isBusy; button.interactive = canAfford && notMaxCoherence && notBusy; button.alpha = button.interactive ? 1.0 : 0.5; button.down = function () { if (!button.interactive || gameState.isBusy) { return; } LK.getSound('buttonsound').play(); button.scale.set(0.95); }; button.up = function () { if (!button.interactive || gameState.isBusy) { button.scale.set(1); return; } button.scale.set(1); gameState.isBusy = true; showVibeBoostWheel(currentCost); }; return button; } function showVibeBoostWheel(cost) { // Create wheel popup container var wheelContainer = new Container(); wheelContainer.x = 2048 / 2; wheelContainer.y = 2732 / 2; game.addChild(wheelContainer); // Create background - doubled size from 800x600 to 1600x1200 var bg = LK.getAsset('reviewBg', { width: 1600, height: 1200, anchorX: 0.5, anchorY: 0.5 }); wheelContainer.addChild(bg); // Create title - adjust Y position for larger window var title = new Text2("VIBE BOOST", { size: 48 * TEXT_SIZE_MULTIPLIER, fill: 0x000000 }); title.anchor.set(0.5, 0); title.y = -500; // Adjusted from -250 for larger window wheelContainer.addChild(title); // Create spinning text - make it larger var spinText = new Text2("Press SPIN to begin!", { size: 48 * TEXT_SIZE_MULTIPLIER, // Increased from 36 fill: 0x000000 }); spinText.anchor.set(0.5, 0.5); wheelContainer.addChild(spinText); // Create spin button - make it larger var spinButton = new Container(); var spinBg = LK.getAsset('buttonBg', { width: 300, // Increased from 200 height: 120, // Increased from 80 color: 0x4a86e8 }); spinBg.anchor.set(0.5, 0.5); spinButton.addChild(spinBg); var spinButtonText = new Text2("SPIN!", { size: 48 * TEXT_SIZE_MULTIPLIER, // Increased from 36 fill: 0x00ff00 }); spinButtonText.anchor.set(0.5, 0.5); spinButton.addChild(spinButtonText); spinButton.y = 300; // Adjusted from 150 for larger window spinButton.interactive = true; spinButton.down = function () { spinButton.scale.set(0.95); }; spinButton.up = function () { spinButton.scale.set(1); startWheelSpin(wheelContainer, spinText, spinButton, cost); }; wheelContainer.addChild(spinButton); } function startWheelSpin(container, spinText, spinButton, cost) { // Deduct cost gameState.vibePoints -= cost; gameState.vibeBoostUses++; // Disable spin button spinButton.interactive = false; spinButton.alpha = 0.5; // Play start sound LK.getSound('wheelstart').play(); // Get available effects var effects = getAvailableWheelEffects(); // Create a proper random selection based on weights var totalWeight = 0; var weightedEffects = []; // Calculate total weight and create array for selection for (var i = 0; i < effects.length; i++) { totalWeight += effects[i].weight; weightedEffects.push({ effect: effects[i], weight: effects[i].weight }); } // Perform weighted random selection var randomNum = Math.random() * totalWeight; var currentWeight = 0; var selectedEffect = null; for (var i = 0; i < weightedEffects.length; i++) { currentWeight += weightedEffects[i].weight; if (randomNum <= currentWeight) { selectedEffect = weightedEffects[i].effect; break; } } // If you want equal chances instead of weighted, use this simpler code: // var randomIndex = Math.floor(Math.random() * effects.length); // var selectedEffect = effects[randomIndex]; // Play spinning sound LK.getSound('wheelspin').play(); // Simulate spinning visually for a short time var spinCount = 0; var currentIndex = 0; var spinInterval = LK.setInterval(function () { // Update display spinText.setText(effects[currentIndex].text); // Move to next option currentIndex = (currentIndex + 1) % effects.length; // Count spins and stop after enough visual spinning spinCount++; if (spinCount > 20) { // Stop spinning LK.clearInterval(spinInterval); // Play stop sound LK.getSound('wheelstop').play(); // Show the randomly selected outcome instead of using the current position spinText.setText(selectedEffect.text); // Execute selected effect var result = selectedEffect.execute(); // Create explanation text with slight delay LK.setTimeout(function () { var explanationText = new Text2(result, { size: 36 * TEXT_SIZE_MULTIPLIER, fill: 0x000000 }); explanationText.anchor.set(0.5, 0.5); explanationText.y = 100; // Position below the outcome text container.addChild(explanationText); // Add close button after explanation appears var closeButton = new Container(); var closeBg = LK.getAsset('buttonBg', { width: 300, height: 120, color: 0x333333 }); closeBg.anchor.set(0.5, 0.5); closeButton.addChild(closeBg); var closeText = new Text2("CLOSE", { size: 48 * TEXT_SIZE_MULTIPLIER, fill: 0x00ff00 }); closeText.anchor.set(0.5, 0.5); closeButton.addChild(closeText); closeButton.y = 300; closeButton.interactive = true; closeButton.down = function () { closeButton.scale.set(0.95); }; closeButton.up = function () { closeButton.scale.set(1); game.removeChild(container); // Only disable busy state if no bug party is active if (!gameState.activeBugParty) { gameState.isBusy = false; } updateTerminal(); createCommandPrompts(); }; container.removeChild(spinButton); container.addChild(closeButton); }, 500); } }, 100); } function shuffleArray(array) { for (var i = array.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var _ref = [array[j], array[i]]; array[i] = _ref[0]; array[j] = _ref[1]; } return array; } function startBugReleaseParty() { // Skip if no bugs to release if (gameState.bugs <= 0) { return "No bugs to release!"; } // Set up initial state gameState.bugParty = { active: true, totalBugs: gameState.bugs, bugsRemaining: gameState.bugs, bugsSquished: 0, timeRemaining: 10, // 10 seconds to squish bugs bugs: [] }; // Disable commands gameState.isBusy = true; gameState.activeBugParty = true; updateCommandButtonsState(false); // Create a timer text using the existing terminal addToTerminalLogWithEffect("Bug party started! Time remaining: 20 seconds"); // Create all bugs at once for (var i = 0; i < gameState.bugs; i++) { createBugWithExistingAssets(i); } // Start timer countdown (updates once per second) gameState.bugPartyTimerId = LK.setInterval(updateBugPartyTimer, 1000); return "Released " + gameState.bugs + " bugs! Squish them quickly!"; } function createBugWithExistingAssets(id) { // Use your existing createASCIIBug function but modify it var bugDesigns = ["๐", "/\\oo/\\", ",-.,.-,", ">8(", "x:*:x", "6\\9"]; var design = bugDesigns[Math.floor(Math.random() * bugDesigns.length)]; var bugContainer = new Container(); var bugText = new Text2(design, { size: 60 * TEXT_SIZE_MULTIPLIER, fill: 0xFF0000 }); bugText.anchor.set(0.5, 0.5); bugContainer.addChild(bugText); // Set up bug properties bugContainer.bugId = id; bugContainer.isSquished = false; bugContainer.velocityX = (Math.random() * 2 - 1) * 8; bugContainer.velocityY = (Math.random() * 2 - 1) * 8; bugContainer.speed = 2 + Math.random() * 3; // Interactive for squishing bugContainer.interactive = true; bugContainer.down = function () { // Prevent double handling if (bugContainer.isSquished) { return; } // Mark as squished immediately bugContainer.isSquished = true; // Visual effect bugText.setText("*splat*"); LK.getSound('bugsquish').play(); bugText.fill = 0x00FF00; // Update party state gameState.bugParty.bugsSquished++; gameState.bugParty.bugsRemaining--; gameState.bugs = Math.max(0, gameState.bugs - 1); // Remove after animation LK.setTimeout(function () { if (bugContainer.parent) { bugContainer.parent.removeChild(bugContainer); } // Remove from tracking array var index = gameState.bugParty.bugs.indexOf(bugContainer); if (index !== -1) { gameState.bugParty.bugs.splice(index, 1); } // Check if all bugs are squished checkBugPartyEnd(); }, 800); }; // Position randomly bugContainer.x = 100 + Math.random() * (2048 - 200); bugContainer.y = 100 + Math.random() * (2732 - 200); // Add to game and tracking game.addChild(bugContainer); gameState.bugParty.bugs.push(bugContainer); // Create update interval for this bug bugContainer.updateInterval = LK.setInterval(function () { // Stop updating if squished or party ended if (!gameState.bugParty || !gameState.bugParty.active || bugContainer.isSquished) { LK.clearInterval(bugContainer.updateInterval); return; } // Movement bugContainer.x += bugContainer.velocityX * bugContainer.speed; bugContainer.y += bugContainer.velocityY * bugContainer.speed; // Bounce off edges if (bugContainer.x < 50 || bugContainer.x > 2048 - 50) { bugContainer.velocityX *= -1; // Increase speed slightly but cap at maximum bugContainer.speed = Math.min(5, bugContainer.speed * 1.05); } if (bugContainer.y < 50 || bugContainer.y > 2732 - 50) { bugContainer.velocityY *= -1; // Increase speed slightly but cap at maximum bugContainer.speed = Math.min(5, bugContainer.speed * 1.05); } // Random direction changes if (Math.random() < 0.02) { bugContainer.velocityX = (Math.random() * 2 - 1) * 4; bugContainer.velocityY = (Math.random() * 2 - 1) * 4; } }, 16); } function updateBugPartyTimer() { // Safety check if (!gameState.bugParty || !gameState.bugParty.active) { if (gameState.bugPartyTimerId) { LK.clearInterval(gameState.bugPartyTimerId); gameState.bugPartyTimerId = null; } return; } // Decrement time gameState.bugParty.timeRemaining--; // Update the terminal every 5 seconds if (gameState.bugParty.timeRemaining % 5 === 0 || gameState.bugParty.timeRemaining <= 3) { addToTerminalLogWithEffect("Time remaining: " + gameState.bugParty.timeRemaining + " seconds"); } // Check if time's up if (gameState.bugParty.timeRemaining <= 0) { endBugParty(); } } function checkBugPartyEnd() { if (gameState.bugParty && gameState.bugParty.active && gameState.bugParty.bugsRemaining <= 0) { endBugParty(); } } function endBugParty() { // Skip if already ended if (!gameState.bugParty || !gameState.bugParty.active) { return; } // Set inactive immediately gameState.bugParty.active = false; // Clear timer interval if (gameState.bugPartyTimerId) { LK.clearInterval(gameState.bugPartyTimerId); gameState.bugPartyTimerId = null; } // For each bug: // 1. Clear its update interval // 2. DISABLE INTERACTIVITY before removing for (var i = gameState.bugParty.bugs.length - 1; i >= 0; i--) { var bug = gameState.bugParty.bugs[i]; // Clear the update interval if (bug.updateInterval) { LK.clearInterval(bug.updateInterval); } // IMPORTANT: Disable interactivity to prevent clicks after party ends bug.interactive = false; // Remove from display if not already squished if (!bug.isSquished && bug.parent) { bug.parent.removeChild(bug); } } // Show results var squished = gameState.bugParty.bugsSquished; var total = gameState.bugParty.totalBugs; // Store bugs reference before nulling the party var bugsToRemove = gameState.bugParty.bugs.slice(); // Final message with results addToTerminalLogWithEffect("Bug party complete! You squished ".concat(squished, " out of ").concat(total, " bugs!"), function () { // Re-enable game gameState.isBusy = false; gameState.activeBugParty = false; // Force recreate command buttons if (gameState.promptContainer && gameState.promptContainer.parent) { game.removeChild(gameState.promptContainer); } gameState.promptContainer = null; createCommandPrompts(); updateCommandButtonsState(true); // NOW remove any remaining bugs (after delay to ensure visual feedback completes) LK.setTimeout(function () { var _iterator = _createForOfIteratorHelper(bugsToRemove), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var bug = _step.value; if (bug && bug.parent) { bug.parent.removeChild(bug); } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } }, 1000); // FINALLY clear the bug party data - after all bugs are handled gameState.bugParty = null; }); } function resetGameProgress() { storage.gamesCompleted = 0; } function generateReview(score) { // Calculate category scores (0-10) var ratings = { graphics: calculateGraphicsScore(), gameplay: calculateGameplayScore(), technical: calculateTechnicalScore(), innovation: calculateInnovationScore(), vibe: calculateVibeScore() }; // Generate a game name instead of using the concepts directly var gameName = generateGameName(); // Generate full review with all sections var review = { title: generateTitle(), // This still generates concept text but will be skipped in display gameName: gameName, // This will be the main title displayed concept: generateConceptLine(), mainScore: score, categoryReviews: { graphics: generateGraphicsReview(ratings.graphics), gameplay: generateGameplayReview(ratings.gameplay), technical: generateTechnicalReview(ratings.technical), innovation: generateInnovationReview(ratings.innovation), vibe: generateVibeReview(ratings.vibe) }, finalThoughts: generateFinalThoughts(score, ratings), userReviews: generateUserReviews(), steamSnippets: generateSteamSnippets() }; return formatReview(review); } // Score calculators function calculateGraphicsScore() { var score = 5; // Reduced from 7 to 5 var _gameState$conceptCar = gameState.conceptCards, visual = _gameState$conceptCar.visual, platform = _gameState$conceptCar.platform; // Visual style impacts var visualImpacts = { 'ASCII': -1, 'Pixel Art': 1, 'Realistic': 2, 'Low-poly': 1, 'Claymation': 2, 'Hand-drawn': 2, 'PowerPoint': -2, 'Demake': -1, 'Voxel': 1 }; // Platform impacts var platformImpacts = { 'VR': 2, 'Console': 1, 'PC': 1, 'Mobile': 0, 'Smart Fridge': -1, 'Smart Watch': -2, 'Web Browser': -1, 'Blockchain': -1, 'Metaverse': 1 }; // Apply modifiers if (visual && visualImpacts[visual]) { score += visualImpacts[visual]; } if (platform && platformImpacts[platform]) { score += platformImpacts[platform]; } // Coherence impact - unchanged but effectively more impactful with lower base score += Math.floor((gameState.codeCoherence - 50) / 20); // 2. INCREASE PENALTY IMPACT // Bug impact increased - divide by 1 instead of 2 score -= Math.floor(gameState.bugs); return Math.min(10, Math.max(1, score)); } function calculateGameplayScore() { var score = 5; // Reduced from 7 to 5 var _gameState$conceptCar2 = gameState.conceptCards, mechanic = _gameState$conceptCar2.mechanic, genre = _gameState$conceptCar2.genre, platform = _gameState$conceptCar2.platform; // Mechanic impacts var mechanicImpacts = { 'Gacha': 1, 'Physics-based': 2, 'Deckbuilding': 1, 'Match-3': 0, 'Auto-battler': 0, 'Dungeon Crawler': 1, 'Roguelike': 2, 'Turn-Based': 1, 'Tower Defense': 1 }; // Genre impacts var genreImpacts = { 'Horror': 1, 'Dating Sim': 0, 'RPG': 2, 'Educational': -1, 'Battle Royale': 1, 'Idle Clicker': -1, 'Open World': 2, 'Casual': 0, 'Shooter': 1 }; // Apply modifiers if (mechanic && mechanicImpacts[mechanic]) { score += mechanicImpacts[mechanic]; } if (genre && genreImpacts[genre]) { score += genreImpacts[genre]; } // Coherence impact - unchanged score += Math.floor((gameState.codeCoherence - 50) / 25); // 2. INCREASE PENALTY IMPACT // Bug impact increased - divide by 1.5 instead of 3 score -= Math.floor(gameState.bugs / 1.5); return Math.min(10, Math.max(1, score)); } function calculateTechnicalScore() { var score = 5; // Reduced from 8 to 5 // Coherence impact - unchanged but more impactful with lower base score += Math.floor((gameState.codeCoherence - 50) / 10); // 2. INCREASE PENALTY IMPACT // Bugs have even more major impact - 1.5x multiplier score -= Math.floor(gameState.bugs * 1.5); // Platform complexity impacts var platform = gameState.conceptCards.platform; var platformComplexity = { 'VR': -2, 'Blockchain': -3, 'Metaverse': -2, 'Mobile': 0, 'Web Browser': -1, 'Smart Fridge': -2, 'Smart Watch': -2, 'Console': 0, 'PC': 1 }; if (platform && platformComplexity[platform]) { score += platformComplexity[platform]; } return Math.min(10, Math.max(1, score)); } function calculateInnovationScore() { var score = 4; // Reduced from 6 to 4 var concepts = gameState.conceptCards; // Enhanced compatibility scoring var uniquenessFactor = 0; // Check for particularly innovative combinations - INCREASED IMPACT if (concepts.platform === 'VR' && concepts.visual === 'ASCII') { score += 4; // Increased from 3 } if (concepts.platform === 'Smart Fridge' && concepts.genre === 'Horror') { score += 4; // Increased from 3 } if (concepts.platform === 'Blockchain' && concepts.genre === 'Dating Sim') { score += 4; // Increased from 3 } if (concepts.visual === 'PowerPoint' && concepts.genre === 'Battle Royale') { score += 4; // Increased from 3 } // NEW: Check for terrible combinations if (concepts.platform === 'Smart Watch' && concepts.genre === 'Open World') { score -= 2; // Penalty for illogical combination } if (concepts.platform === 'VR' && concepts.visual === 'PowerPoint') { score -= 1; // Penalty for nauseating combination } if (concepts.platform === 'Blockchain' && concepts.mechanic === 'Physics-based') { score -= 2; // Penalty for technically contradictory combination } // NEW: More nuanced combinations if (concepts.platform === 'Mobile' && concepts.genre === 'Casual') { score += 1; // Good fit for platform } if (concepts.platform === 'PC' && concepts.genre === 'RPG') { score += 1; // Classic good combination } if (concepts.platform === 'Smart Watch' && concepts.genre === 'Idle Clicker') { score += 2; // Perfect for platform limitations } // General uniqueness checks if (concepts.platform === 'Smart Fridge' || concepts.platform === 'Smart Watch') { uniquenessFactor += 1; } if (concepts.visual === 'ASCII' || concepts.visual === 'PowerPoint') { uniquenessFactor += 1; } if (concepts.mechanic === 'Gacha' && concepts.genre === 'Horror') { uniquenessFactor += 2; } score += uniquenessFactor; // Vibe points boost innovation score += Math.floor((gameState.vibePoints - 50) / 20); return Math.min(10, Math.max(1, score)); } function calculateVibeScore() { // Heavily influenced by vibe points var score = Math.floor(gameState.vibePoints / 12); // Reduced impact from /10 to /12 // Coherence adds smaller bonus score += Math.floor((gameState.codeCoherence - 50) / 20); // Bugs more significantly reduce vibe - divide by 2 instead of 4 score -= Math.floor(gameState.bugs / 2); return Math.min(10, Math.max(1, score)); } function generateGameName() { var _specificParodies; var concepts = gameState.conceptCards; var platform = concepts.platform; var visual = concepts.visual; var genre = concepts.genre; var mechanic = concepts.mechanic; var feature = concepts.feature; // Specific parody names for platform/genre combinations var specificParodies = (_specificParodies = { // Smart Fridge combinations 'Smart Fridge_RPG': ["The Colder Scrolls", "Chrono Fridger", "Final Fridge Fantasy", "Mass Defrost", "Dragon Refrigerator", "Fridge Story", "The Witcher 3: Wild Lunch", "The Legend of Kelvin", "Ice Emblem", "Biofrost"], 'Smart Fridge_Horror': ["Resident Refrigerator", "Silent Chill", "Five Nights at Fridgey's", "Dead Defrost", "Alien: Icebox", "Amnesia: The Dark Freezer", "Outlast Leftovers", "Until Spoil", "Cold Hill", "Defrosternaut"], 'Smart Fridge_Shooter': ["Call of Duty: Cold Storage", "Fridgewatch", "Counter-Strike: Frozen Offensive", "Refriger-nite", "Apex Cold Cuts", "BattleChill", "Halo: Combat Refrigerated", "Destiny: The Frozen King", "Half-Freeze", "FOOM"], // VR combinations 'VR_Horror': ["Resident VR-vil", "Virtual Nights at Freddy's", "Silent Immersion", "Until VR", "Alien: Virtual Isolation", "Paranormal VR-ctivity", "The VRinging", "Headset Evil", "Immersive Dead", "Outlast Your Nausea"], 'VR_Shooter': ["Call of VR-ty", "Counter-Strike: Virtual Offensive", "Super Hot VR... Wait That's Real", "Borderheadsets", "Half-Life: VRyx", "VR-PEX Legends", "VRattle Royale", "Rainbow Six: VR-ge", "Doom VR-ternal", "VR-verwatch"], 'VR_Dating Sim': ["VR-tual Boyfriend", "Doki Doki Headset Club", "I Love You, Colonel VR-ders", "Dream VR-ddy", "Immersive Love Plus", "Hatoful VR-friend", "Virtual Romance Academy", "Mystic VR-ssenger", "Motion Sickness Love Story", "Dating Sim: Nausea Edition"], // Blockchain combinations 'Blockchain_Dating Sim': ["Non-Fungible Tryst", "Crypto Crush Saga", "Love on the Ledger", "NFTeens", "Decentralized Dating", "Blockchain Beach", "Gas Fee Romance", "Smart Contract Hearts", "Proof of Love", "Tokenized Tinder"], 'Blockchain_RPG': ["Final NFTasy", "The Elder Coins", "World of Ethereum-craft", "Cryptomon", "Satoshi's Sword", "Gas Fee Legends", "Block & Chain: Digital Dungeons", "Crypto-Night Chronicles", "Decentralized Dragons", "Mining Quest IX"], // Smart Watch combinations 'Smart Watch_Open World': ["Grand Theft Wristband", "Red Dead MicroScreen", "The Elder Scrolls V: WristRim", "Horizon: Zero Battery", "Glance Dogs", "Assassin's Creed: Wristerhood", "The Legend of Wristda", "Watch_Dogs... No Wait That's Real", "Tiny Theft Auto", "Far Wrist"], 'Smart Watch_Battle Royale': ["Fortnite: Wrist Edition", "Player Wrist-Known Battlegrounds", "Micro Royale", "ApexWrist Legends", "Call of Duty: Tiny Warzone", "Wristcraft Hunger Games", "Tiny Unknown's Battlegrounds", "Wearable Winner", "Squint & Shoot", "Battery Drainer Royale"], // ASCII combinations 'ASCII_Horror': ["Resident ASCII", "Silent Text", "Five Nights at Terminal's", "Dead Symbols", "Fatal Function", "The | | | | |ng", "Outlast: Terminal Edition", "ASCII Horror Story", "Type:Survive", "Paranormal ASCII-tivity"], 'ASCII_RPG': ["Final ASCII", "The Coder Scrolls", "World of TextCraft", "Mass Typefect", "Lord of the Symbols", "ASCII Quest", "Chrono Terminal", "Dragon Text", "> You Died: The Game", "Path of ASCII"], // PowerPoint combinations 'PowerPoint_Battle Royale': ["PowerPoint Unknown's Battlegrounds", "Slide Royale", "Apex Presentations", "Call of Duty: BoardRoom Warfare", "Last Slide Standing", "Star Wipe Showdown", "Office Battle Simulator", "Transition: The Battle Royale", "Death by PowerPoint", "Quarterly Report Royale"], 'PowerPoint_RPG': ["Final PowerPoint", "The Elder Slides", "Office Fantasy", "World of SlideShows", "Mass Present", "Dragon Presentation", "Clip Art Quest", "Spreadsheet Fantasy VII", "The Legend of SmartArt", "Transition Effects: The RPG"], // Visual styles with genres 'Pixel Art_RPG': ["Final Pixel", "ChronoPixel", "Secret of Pixelana", "PixelQuest", "Breath of Pixel", "Octopath Pixeler", "Pixel Fantasy", "Pixelborne", "The Legend of Pixel", "Dragon Pixelst"], 'Claymation_Horror': ["Five Nights at Claydy's", "Resident Clayil", "Silent Mold", "Claymation Park", "Clay Dead", "Amoldsia: The Dark Descent", "The Clayning", "Outlast: Clay Trials", "Until Shaped", "Alien: Clay Isolation"], 'Web Browser_RPG': ["Click Quest", "Tab Hunter: The Scrolling", "The Elder Sites", "World of Webpage", "Chromatic Fantasy", "Safari Quest VII", "The Legend of Link", "Mass Navigation", "Dragon Cache", "Cookie Clicker's Creed"], 'Mobile_Horror': ["Five Nights On Battery", "Silent Notification", "Resident Evil: Pocket Edition", "Dead Cellphone", "Phone Phobia", "Alien: Mobile Isolation", "Until Battery Dies", "Outlast My Data Plan", "Blair Swipe Project", "Tap to Survive"], 'PC_Dating Sim': ["Steam Hearts", "Desktop Darling", "My Computer Romance", "Alt+Tab Love Story", "Command-Line Cupid", "Windows of the Heart", "Keyboard Connections", "MouseMate", "Monitor My Heart", "Hard Drive Me Crazy"], 'Console_Battle Royale': ["DualShock Showdown", "Last Controller Standing", "Controller Royale", "Joy-Con Warzone", "Playstation Battle Station", "Xbox Elimination", "Nintendo Ninety-Nine", "Console Combat", "Gamepad Gauntlet", "Trophy Hunter"], 'Metaverse_Educational': ["Learn To Earn", "Virtual Classroom Infinity", "Meta-Knowledge", "Digital Diploma", "Avatar Academy", "Professor NFT", "School of Thought 3.0", "Decentralized Degree", "Immersive IQ", "EdTech Eternity"], 'Blockchain_Shooter': ["Non-Fungible Targets", "Crypto Combat", "Block and Load", "Chain Reaction", "Gas Fee Gunner", "Decentralized Defense", "Hash Rate Hero", "Proof of Kill", "Wallet Warriors", "Mine and Shoot"], 'Voxel_Dating Sim': ["Cube Cupid", "Blockhearts", "Love in Low Resolution", "Voxel Valentine", "Cubic Crush", "Squared Soulmates", "Block by Block Romance", "Pixelated Passion", "Cubed Connection", "Minecraft: Love Edition"], 'Hand-drawn_Horror': ["Sketched Nightmares", "Inked Terrors", "Drawing Dead", "Pencil Panic", "Sketchbook Survival", "Illustrated Evil", "Drawn to Darkness", "Doodle of Doom", "Graphite Grotesque", "Canvas of Fear"], 'Roguelike_Idle Clicker': ["Permadeath Profits", "Idle Dungeon", "Click Till You Die", "Procedural Progress", "AFK Adventures", "Rogue Incremental", "Passive Permadeath", "Death Clicker", "Fateful Fortunes", "Idle of the Dungeon"], 'Tower Defense_Open World': ["Fortress Exploration", "Open Tower", "Defensive Freedom", "World of Towers", "No Man's Turret", "Wandering Defenses", "Breath of the Tower", "Red Dead Protection", "Grand Theft Tower", "Skyrim With Turrets"], 'Physics-based_Educational': ["Newton's Classroom", "Learning Gravity", "Physics 101: The Game", "Mass Education", "Momentum Masters", "Scientific Simulator", "Force Feedback Learning", "Educational Experiments", "Gravity Grade School", "Physical Science Pro"], 'Deckbuilding_Horror': ["House of Cards", "Deck of the Dead", "Draw Your Doom", "Horror in Hand", "Card Cthulhu", "Shuffle of Terror", "Tabletop Terrors", "Cardboard Nightmares", "Draw of the Dark", "Collectible Carnage"], 'Auto-battler_Dating Sim': ["Love Automated", "Auto Romance", "Battle for Love", "Hands-Off Hearts", "Algorithmic Attraction", "Strategic Seduction", "Auto-Swipe", "Matchmaker Mayhem", "Chess of the Heart", "Tactical Romance"], 'Match-3_Battle Royale': ["Gem Warfare", "Last Match Standing", "Battle Jewels", "Candy Crush Battle", "Match to Survive", "Dropping into Danger", "Royal Rows", "Puzzle Royale", "Swipe or Die", "Three of a Kind or Die"], 'Smart Watch_Dating Sim': ["Wrist Romance", "Heartbeat Connection", "Swipe Right on Time", "Watch For Love", "Small Screen Soulmate", "Time for Love", "Digital Watch Dating", "Pulse Rate Romance", "Wristband Relationships", "Timeless Connection"], 'Realistic_Casual': ["Reality Break", "Casual Realism", "Photorealistic Pet Collector", "Life-Like Leisure", "Hyperreal Farm Sim", "Ultra Detail Village", "Realistic Relaxation", "True-to-Life Tycoon", "Everyday Simulator", "Detailed Downtime"], 'Cross-Platform_Battle Royale': ["Play Anywhere, Die Everywhere", "Cross-Platform Carnage", "Universal Warfare", "Device Royale", "Anywhere Arena", "The Platform Games", "Cross-Play Combat", "Sync or Swim", "Universal Elimination", "Multi-Device Mayhem"], 'Procedural Generation_Educational': ["Learning Infinity", "Knowledge Generator", "Endless Education", "Procedural Professor", "Algorithm Academy", "Random Knowledge", "Generated Genius", "Never-Ending Lessons", "Infinite IQ", "Classroom Creator"], // Metaverse combinations 'Metaverse_RPG': ["Baldur's Metaverse", "Divinity: Original Meta", "Disco Meta", "Pillars of Meternity", "Planescape: Metaverse", "Wasteland Meta", "Star Meta: The Old Republic", "Metaverse Age: Inquisition", "Path of Metaverse", "Metascape Torment"], 'Metaverse_Shooter': ["Meta Eternal", "MetaShock", "Wolfenstein: New Metaverse", "Meta Fortress 2", "Bordermetaverse", "Medal of Meta", "Serious Meta", "Perfect Metaverse", "Quake Meta", "Unreal Metaverse"], 'Metaverse_Horror': ["Amnesia: The Meta Descent", "Meta Space", "Metabound", "Meta May Cry", "The Meta Medium", "Meta by Daylight", "Alien: Meta Isolation", "The Evil Meta", "Meta Isolation", "The Meta of Us Part II"], // ASCII combinations 'ASCII_Dating Sim': ["Terminal Romance", "ASCII After", "Dream Terminal", "/bin/love", "sudo apt-get install romance", "Character Sheet Romance", "Command Line Connections", "Bash & Romance", "Text Mode Heart", "Prompt://Love"], 'ASCII_Battle Royale': ["Terminal Conflict", "ASCII Arena", "Last Character Standing", "Command-Line Carnage", "Text Royale", "sudo battle-royale", "Bash Battlefield", "Monospace Mayhem", "CRT Conflict", "Shell Showdown"], // PC combinations 'PC_Horror': ["System32.Horror", "Blue Screen of Death", "Alt-Tab Terror", "Fatal Error", "Task Manager's Nightmare", "C:/Program Files/Fear", "CMOS Corruption", "Motherboard Malevolence", "Fatal Boot Error", "Registry Corruption"] }, _defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_specificParodies, "PC_Dating Sim", ["Alt+Tab Heart", "System Preferences: Romance", "Runtime Exception: Love", "My Documents/Love Letters", "Registry Key to My Heart", "Task Manager's Heart", "Control Panel Romance", "Device Manager Dating", "Startup Romance", "Windows Update of My Heart"]), 'Physics-based_RPG', ["Trajectory Quest", "Momentum Saga", "Inertial Fantasy", "Gravity's Edge", "Parabolic Adventure", "Vector Force Chronicles", "Kinetic Quest", "Friction Fantasy", "Quantum Realms", "Momentum & Magic"]), 'Physics-based_Horror', ["Gravitational Dread", "Momentum Terror", "Quantum Nightmares", "Fluid Dynamics of Fear", "Terminal Velocity", "Half-Life: Alyx's Nightmare", "Event Horizon", "Entropic Horror", "Conservation of Screams", "Schrรถdinger's Nightmare"]), 'Console_Horror', ["DualShock Horror", "Controller Drift Nightmare", "Haptic Feedback Fear", "Memory Card Corruption", "XScare Series", "PlayScaretion", "SwitchFright", "GameStation Terror", "Analog Horror", "Thumbstick Dread"]), 'Console_Dating Sim', ["DualShock of Love", "Analog Heart", "L1 + R1 of Love", "Memory Card Memories", "Haptic Heartbeat", "First Party Romance", "Exclusive Relationship", "Cross-Platform Love", "Joy-Connection", "Player Two Enter"]), 'Hand-drawn_Battle Royale', ["Sketch Royale", "Ink Arena", "Brushstroke Battlefield", "Canvas Combat", "Watercolor Warfare", "Charcoal Champions", "Pencil Lead Last Stand", "Illustration Elimination", "Doodle Deathmatch", "Drawn & Danger"]), 'Hand-drawn_RPG', ["Sketchbook Quest", "Ink & Incantations", "Charcoal Champions", "Graphite Grind", "Pencil Lead Legends", "Watercolor Wanderers", "Brushstroke Battles", "Illustrated Adventure", "Doodle Dungeons", "Pen & Paper & Pixels"]), 'Roguelike_Dating Sim', ["Binding of Hearts", "Enter the Love Dungeon", "FTL: Faster Than Love", "Hades Date", "Slay the Heart", "Dead Date Redemption", "Love & Procedural Generation", "Relationship Rogue", "Into the Breach of Love", "Risk of Romance 2"]), 'Roguelike_Horror', ["Binding of Terror", "Enter the Fear Dungeon", "Dead Fear Redemption", "FTL: Faster Than Light Terrors", "Hades Nightmare", "Slay the Beast", "Lovecraft's Rogue", "Into the Scream", "Risk of Horror 2", "Curse of the Dead Gods"]), "Blockchain_Shooter", ["CryptoShock Infinite", "Uncharted: Blockchain's Fortune", "Medal of Ethereum", "Proof-of-Stake Fortress 2", "Gas Fees of War", "Unreal Blockchain", "Block Fortress", "Smart Contract Battlegrounds", "DeFi-nite", "Solana 4 Dead"]), _defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_specificParodies, 'Blockchain_Horror', ["Silent Blockchain", "Distributed Ledger of Evil", "Hash Function Horror", "Proof-of-Stake Hill", "Gas Fee by Daylight", "Alien: Blockchain Isolation", "Consensus Mechanism Evil", "Smart Contract Horror", "Nodes of Fear", "Mining Nightmares"]), "Smart Watch_Dating Sim", ["Heartbeat Monitor", "Swipe Right on Wrist", "Tiny Screen Romance", "Wrist Notification of Love", "BPM: Beats Per Match", "Haptic Heart", "Step Counter Sweethearts", "Wearable Love Story", "Battery Life of Love", "Taptic Romance"]), 'Smart Watch_Horror', ["Wrist Notification Terror", "Heart Rate Horror", "Battery Drain Dread", "Haptic Horrors", "Step Counter Stalker", "Taptic Terrors", "Time's Running Out", "Midnight Watch", "Digital Crown Nightmare", "Complications"]), 'Web Browser_Horror', ["404 Terror Not Found", "Cookie Monsters", "HTTP Horrors", "JavaScript Nightmares", "Cache Corruption", "DNS Demons", "SSL Screamers", "Browser History Haunting", "Dark Web", "Incognito Mode"]), 'Web Browser_Dating Sim', ["E-Romance Explorer", "Cookie Consent Hearts", "Hypertext Hearts", "Bookmark My Heart", "New Tab New Love", "Private Browsing Passion", "Add to Favorites", "Download Complete: Love", "Connection Secured", "HTTP Status 200: OK Cupid"]), 'Mobile_RPG', ["Tap Quest Heroes", "Swipe & Slash Saga", "Battery Drain Fantasy", "Notification RPG", "In-App Purchase Adventure", "Gacha Life", "Pocket Legend", "Touchscreen Tales", "Idle Heroes of Might", "AFK Arena of Time"]), 'Mobile_Battle Royale', ["Low Battery Royale", "One Touch One Kill", "Swipe to Survive", "Notification Battleground", "Mobile Data Warfare", "Auto-Rotate Arena", "Screen Time Showdown", "Tap Fire", "Airplane Mode Mayhem", "Battery Saver Battleground"]), 'AI Companions_RPG', ["Neural Network Fantasy", "Deep Learning Quest", "Machine Learning Legends", "Algorithm Adventure", "GPT Knights", "Transformer Tales", "Artificial Quests", "Synthetic Saga", "Turing Test Trials", "LSTM Legends"]), 'NFT Integration_RPG', ["Fungible Fantasy", "Tokenized Tales", "Digital Asset Dungeons", "Blockchain Battles", "Wallet Warriors", "Gas Fee Quest", "Smart Contract Saga", "Minting Monsters", "Ledger Legends", "Crypto Crusaders"]), 'Voxel_Horror', ["Cubic Fears", "Block Terror", "Voxel Nightmares", "Cubism of Death", "Blocky Horrors", "Six-Sided Screams", "Pixel Depth Frights", "Cubic Isolation", "Volumetric Void", "Blocktober Horror"]), _defineProperty2(_defineProperty2(_specificParodies, 'Voxel_RPG', ["Cube Quest", "Block Saga", "Six-Sided Story", "Voxel Ventures", "Cubic Characters", "Blockcraft Legends", "Volumetric Valkyries", "Cube Crawler", "Voxel Vanguard", "Block & Blade"]), 'Low-poly_Horror', ["Faceted Fears", "Vertex Horror", "Triangle Terror", "Low-Resolution Nightmares", "Polygon Panic", "Facet Fright", "Primitive Horror", "Wireframe Worries", "Unsmoothed Unholy", "Jagged Edge"])); // Check for specific combinations first var specificKey = ''; if (platform && genre) { specificKey = platform + '_' + genre; if (specificParodies[specificKey]) { return specificParodies[specificKey][Math.floor(Math.random() * specificParodies[specificKey].length)]; } } if (visual && genre) { specificKey = visual + '_' + genre; if (specificParodies[specificKey]) { return specificParodies[specificKey][Math.floor(Math.random() * specificParodies[specificKey].length)]; } } // If no specific parody found, use the placeholder system as fallback // Collections of name templates by genre var genreNames = { 'Horror': ["Five Nights at {platform}", "Resident {visual}", "Silent {mechanic}", "Dead {platform}", "Alien: {feature}", "{platform} Evil", "The {visual} of Us", "Dying {mechanic}", "Until {visual}", "Outlast {feature}", "{mechanic} Park", "The {platform} Dark", "Amnesia: The {visual} Descent", "{mechanic} Isolation", "Little {platform}s", "The {visual} Medium", "{mechanic} May Cry", "Blair {feature} Project"], 'Dating Sim': ["Love Plus {platform}", "{visual} Academy", "Dream {mechanic}", "My {platform} Romance", "{feature} Story", "Doki Doki {visual} Club", "Hatoful {mechanic}", "{platform} Boyfriend", "Heart of {feature}", "{visual} Sweetheart", "True {mechanic}", "Starlight {platform}", "Summer {visual}", "{mechanic} of Love", "Sweet {platform} Kiss", "{feature} Connection"], 'RPG': ["Final {platform}", "{visual} Quest", "Elder {mechanic}", "Mass {feature}", "Dragon {visual}", "Fallout: New {platform}", "The Witcher 3: Wild {mechanic}", "Persona {visual}", "{platform} Fantasy", "Dark {mechanic}", "Chrono {feature}", "World of {platform}craft", "Kingdom {visual}", "Path of {mechanic}", "Monster {feature}", "{platform} Effect", "Baldur's {visual}", "Star {mechanic} Online", "Disco {feature}"], 'Educational': ["Math {platform}", "Oregon {visual}", "Brain {mechanic}", "Knowledge {feature}", "{platform} Academy", "Where in the {visual} is Carmen Sandiego?", "Number {mechanic}", "{platform} Simulator", "Reader {visual}", "Code {mechanic}", "{feature} Quest", "Science {platform}", "{visual} Lab", "History {mechanic}", "Geography {feature}", "Dr. {platform}'s Learn & Play"], 'Battle Royale': ["Player{platform}'s Battlegrounds", "{visual}nite", "Call of {mechanic}: Warzone", "Apex {feature}", "{platform} Royale", "H1{visual}1", "Last {mechanic} Standing", "Super {platform} Arena", "Realm {visual}", "Hyper {mechanic}", "Darwin {feature}", "Ring of {platform}", "Fall {visual}", "Cuisine {mechanic}", "Radical {feature}"], 'Idle Clicker': ["Cookie {platform}", "{visual} Capitalist", "Clicker {mechanic}", "Idle {feature}", "{platform} Tycoon", "Tap {visual}", "Incremental {mechanic}", "{platform} Mine", "Factory {visual}", "Candy {mechanic} Saga", "Exponential {feature}", "{platform} Billionaire", "Endless {visual}", "Infinity {mechanic}", "Progress {feature}", "Tapper {platform}"], 'Open World': ["Grand Theft {platform}", "Red Dead {visual}", "{mechanic} Creed", "The Legend of {feature}", "Ghost of {platform}", "Horizon: {visual} Dawn", "Far {mechanic}", "Watch {feature}", "Just {platform}", "Saints {visual}", "Yakuza: Like a {mechanic}", "Mafia: {feature} City", "Infamous: {platform} Son", "Dying {visual}", "Spider-{mechanic}", "Breath of the {feature}", "Skyrim: {platform} Edition"], 'Casual': ["Angry {platform}s", "Candy {visual}", "Fruit {mechanic}", "{feature} Crush Saga", "Farm {platform}", "Tiny {visual}", "Happy {mechanic}", "Plant vs {feature}", "{platform} Valley", "Hidden {visual}", "Mystery {mechanic} Theater", "{feature} Pop", "Garden {platform}", "Animal {visual}", "Pocket {mechanic}", "{feature} Paradise"], 'Shooter': ["Call of {platform}", "{visual}field", "Counter-{mechanic}", "Team {feature} 2", "Half-{platform}", "Doom {visual}", "Halo: {mechanic} Evolved", "Bio{feature}", "{platform}shock", "Metal {visual}", "Gears of {mechanic}", "Rainbow Six: {feature}", "Border{platform}s", "Destiny {visual}", "Overwatch {mechanic}", "Valorant {feature}"] }; // Additional name templates based on platform var platformNames = { 'VR': ["Beat {genre}", "Super{genre} VR", "Job {visual}ator", "Half-Life: {genre}", "I Expect You To {visual}", "VR{genre}", "The {genre} Lab", "Virtual {mechanic} Simulator"], 'Smart Fridge': ["Fridge {genre}", "Cool {visual}", "Chilled {mechanic}", "Frost{genre}", "Ice Cold {feature}", "Refrigerated {visual}", "Freezer {mechanic}", "Kitchen {genre} Simulator"], 'Blockchain': ["Crypto{genre}", "NFT {visual}", "Block{mechanic}", "Chain {genre}", "Decentralized {feature}", "Ethereum {visual}", "Token {mechanic}", "Gas Fee {genre}"], 'Smart Watch': ["Wrist{genre}", "Time {visual}", "Watch{mechanic}", "Tiny {genre}", "Glance {feature}", "Tick Tock {visual}", "Nano{mechanic}", "Hand{genre}"] }; // Visual style specific names var visualNames = { 'ASCII': ["Terminal {genre}", "Text {mechanic}", "Command {feature}", "Mono{genre}", "ASCII {mechanic}", "Code{feature}", "{genre}.exe", "Matrix {mechanic}"], 'PowerPoint': ["Slide {genre}", "Presentation {mechanic}", "Office {feature}", "PowerPoint {genre}", "Bullet {mechanic} Point", "Clipart {feature}", "Star Wipe {genre}", "Transition {mechanic}"] }; // Name collections for specific genre-platform-mechanic combos var specialCombos = { 'VR_ASCII': ["The Matrix: ASCII Revolution", "Cyber{genre}", "Terminal Reality", "Text-Based {feature} Experience", "V.R.T.: Virtual Reality Terminal", "Code Vision", "Matrix Vision"], 'Smart Fridge_Horror': ["Cold Storage", "Frostbite {feature}", "Midnight Snack: {mechanic} Edition", "The Thing in my Fridge", "ICE SCREAM", "Defrost Nightmare", "The Cold Ones", "Chilling Presence"], 'Blockchain_Dating Sim': ["Crypto Crush", "Love Chain", "NFT Romance", "Token of my Affection", "Decentralized Hearts", "Smart Contract Love", "Blockchain Boyfriend", "Digital Asset Romance"], 'PowerPoint_Battle Royale': ["Slide or Die", "Last Presentation Standing", "Battle Deck", "PowerPoint PUBG", "Office Royale", "Transition Battleground", "99 Slides", "Star Wipe Survival"] }; // Start building a list of possible names var possibleNames = []; // Add names from the genre collections first if (genre && genreNames[genre]) { possibleNames = possibleNames.concat(genreNames[genre]); } // Add platform-specific names if (platform && platformNames[platform]) { possibleNames = possibleNames.concat(platformNames[platform]); } // Add visual style-specific names if (visual && visualNames[visual]) { possibleNames = possibleNames.concat(visualNames[visual]); } // Check for special combinations var comboKey = ''; if (platform && genre) { comboKey = platform + '_' + genre; if (specialCombos[comboKey]) { possibleNames = possibleNames.concat(specialCombos[comboKey]); } } if (platform && visual) { comboKey = platform + '_' + visual; if (specialCombos[comboKey]) { possibleNames = possibleNames.concat(specialCombos[comboKey]); } } // If we still don't have names, add some generic fallbacks if (possibleNames.length === 0) { possibleNames = ["Super {platform} {genre}", "Amazing {visual} {mechanic}", "Fantastic {feature} {genre}", "Incredible {platform} {visual}", "Epic {mechanic} {feature}", "{platform} {genre} Simulator", "{visual} {mechanic} Adventure", "The Legend of {feature} {platform}"]; } // Select a name template var nameTemplate = possibleNames[Math.floor(Math.random() * possibleNames.length)]; // Replace placeholders with actual concepts var name = nameTemplate.replace('{platform}', platform || 'Game').replace('{visual}', visual || 'Adventure').replace('{genre}', genre || 'Action').replace('{mechanic}', mechanic || 'Play').replace('{feature}', feature || 'Plus'); return name; } function generateTitle() { var concepts = gameState.conceptCards; var title = ""; // Compile core concepts var coreFeatures = [concepts.platform, concepts.visual, concepts.genre, concepts.mechanic, concepts.feature].filter(Boolean); title = coreFeatures.join(" "); return title + "\n"; } function generateConceptLine() { return "Game Concept: " + (gameState.conceptCards.genre || '') + " " + (gameState.conceptCards.mechanic || '') + " on " + (gameState.conceptCards.platform || '') + " with " + (gameState.conceptCards.visual || '') + " graphics and " + (gameState.conceptCards.feature || '') + "\n"; } function generateGraphicsReview(score) { // Visual style comments var visualComments = { 'ASCII': ["The ASCII art visuals create an experience that feels like staring at The Matrix after three energy drinks. Players report developing the ability to 'see the code' in everyday objects.", "The text-based graphics somehow manage to be both charmingly retro and actively hostile to human eyeballs. Several players have reported dreaming in monospace font.", "The terminal aesthetic evokes a time when computers were mysterious and threatening. The game's willingness to sacrifice visual clarity for nostalgic authenticity is either brave or criminally negligent."], 'Pixel Art': ["The pixel art style delivers a perfect balance of nostalgia and modern sensibilities, like finding your childhood teddy bear equipped with Bluetooth.", "Each meticulously crafted pixel contributes to an aesthetic that makes players feel simultaneously transported to 1992 and impressed by contemporary design choices.", "The deliberately constrained resolution creates a charming retro vibe while hiding technical limitations behind an 'artistic choice' faรงade."], 'Hand-drawn': ["The hand-drawn visuals create a unique aesthetic that feels like playing through someone's particularly elaborate notebook doodles, complete with occasional coffee stains for authenticity.", "The drawings oscillate between 'charming amateur' and 'unexpectedly profound,' leaving players unsure if they're experiencing art or an elaborate joke about art.", "Each frame appears lovingly sketched by someone with either remarkable talent or concerning amounts of free time. The inconsistency between scenes suggests multiple artists or a single artist with rapidly evolving personalities."], 'PowerPoint': ["The PowerPoint aesthetic is implemented with such commitment that players report experiencing flashbacks to corporate quarterly reviews. The star wipe transition between death and respawn is particularly traumatizing.", "Slide transitions serve as both game mechanics and psychological torture devices. The development team has somehow weaponized corporate presentation software to stunning effect.", "The deliberate use of default templates and clip art creates an uncanny corporate nightmare that makes the mundane terrifying. Several players have reported developing hives when seeing bullet points outside the game."], 'Low-poly': ["The low-poly visuals strike that perfect balance between 'deliberate artistic choice' and 'we couldn't afford more polygons.' Corners that could take someone's eye out are featured prominently.", "Sharp angles and flat surfaces create an aesthetic that's simultaneously nostalgic for the early 3D era and suspiciously modern in its execution.", "The angular aesthetic feels like a love letter to the PlayStation 1 era, complete with authentic texture warping that wasn't intentional then but somehow is now."], 'Claymation': ["The claymation style brings a tactile quality to the game, complete with visible fingerprints that suggest either artistic authenticity or a crime scene. Possibly both.", "Characters move with that signature stop-motion jerkiness that's either charming or unsettling depending on your childhood experiences with Wallace and Gromit.", "The deliberate imperfections in the clay models create an unsettling organic quality, as if the digital world is somehow made of actual physical materials that could rot if left unattended."], 'Realistic': ["The realistic graphics sometimes cross into uncanny valley territory, creating characters who look almost human but whose dead eyes suggest they've seen the void between worlds.", "The photorealistic visuals create an immersive experience that occasionally makes players forget what reality they're in, which may or may not be the point.", "The high-fidelity graphics push hardware to its limits, raising the philosophical question of whether melting your GPU was part of the artistic vision."], 'Voxel': ["The voxel-based graphics create a world that feels simultaneously childlike and ominous, like a LEGO set assembled by someone with questionable intentions.", "Blocky characters and environments give the game a charm that cleverly masks how technically challenging proper curves would have been to implement.", "The cubist aesthetic makes everything look like it belongs in a universe where Minecraft won the console wars and all other visual styles were outlawed."], 'Demake': ["The deliberately downgraded aesthetic captures the essence of playing on hardware that wasn't quite up to the task, complete with authentic slowdown when more than three objects are on screen.", "The demake style implements visual constraints so convincingly that players report checking if their graphics card has somehow been replaced with a potato.", "The authentically degraded visuals inspire genuine nostalgia, making players long for a time when expectations were lower and imagination filled in the graphical gaps."] }; // Platform-specific comments var platformComments = { 'VR': ["The VR implementation creates an immersive experience that's both impressive and occasionally nauseating. Multiple players report developing 'VR legs' and losing their actual legs in the process.", "Moving through virtual space feels surprisingly natural, though the occasional clipping issues break immersion and sometimes the laws of physics.", "The game takes full advantage of virtual reality's possibilities while also embracing its limitations, like how most players will quit after 30 minutes because they feel like they're going to throw up."], 'Mobile': ["The mobile platform limitations are cleverly disguised as design choices, with menu buttons large enough to accommodate fingers of all sizes and intelligence levels.", "The game's performance on phones suggests either remarkable optimization skills or a dark pact with the silicon gods of battery life.", "Touch controls have been implemented with surprising precision, making them only moderately more frustrating than using actual buttons."], 'Console': ["The console version makes efficient use of controllers, requiring only minor finger contortions that physical therapists describe as 'probably not immediately damaging.'", "Load times have been optimized to be just short enough that players won't quite have time to make a sandwich but long enough to contemplate their life choices.", "The game pushes console hardware to its limits, occasionally causing fans to spin so loudly they've been mistaken for small aircraft."], 'PC': ["PC-specific features are implemented with the appropriate level of customization options, allowing players to spend more time adjusting graphics settings than actually playing.", "System requirements seem reasonable until you actually try to run it, at which point your computer fans begin to sound like a jet engine preparing for takeoff.", "The keyboard and mouse controls are intuitive enough that only three or four limbs are required to perform basic functions."], 'Web Browser': ["The browser-based implementation somehow manages to both tax your system resources and make you question what your expensive computer is even doing with all that processing power.", "Cross-browser compatibility has been achieved in the same way world peace might be: through compromise, sacrifice, and the occasional complete surrender.", "The game loads just slowly enough to make you consider refreshing the page but not quite slowly enough to justify actually doing so."], 'Blockchain': ["The blockchain implementation adds a layer of technological complexity that absolutely no one asked for but somehow makes the game both slower and more expensive to play.", "Each in-game action consumes enough electricity to power a small village, which the developers insist is a feature, not a bug of blockchain technology.", "The decentralized architecture ensures that no single entity controls your gaming experience, except for the three mining pools that collectively control 90% of the network."], 'Smart Fridge': ["The smart fridge implementation cleverly uses the door opening as a loading screen, though extended gameplay sessions have resulted in concerning food spoilage incidents.", "Playing on kitchen appliances represents either the future of gaming or a concerning sign of technology's unchecked spread into every aspect of our lives.", "The cold air wafting from the open fridge door creates an immersive environmental effect for ice levels, though the developers disclaim responsibility for resulting electricity bills."], 'Smart Watch': ["The smart watch version compresses the experience onto a screen roughly the size of a postage stamp, causing players to develop superhuman visual acuity or severe eye strain, possibly both.", "Wrist-based controls utilize accelerometers in ways their creators never intended and probably wouldn't approve of if consulted.", "Battery optimization has been approached with the same strategy as a kamikaze pilot: full power until nothing remains."], 'Metaverse': ["The metaverse implementation creates a virtual world inside another virtual world, raising philosophical questions about recursive reality that the developers are definitely not qualified to answer.", "The persistent online environment offers unprecedented opportunities for social interaction, primarily allowing players to ignore each other in digital space instead of physical space.", "Metaverse integration adds a layer of existential confusion to gameplay, with multiple players reporting they now struggle to distinguish between reality levels like characters in Inception."] }; var _gameState$conceptCar3 = gameState.conceptCards, visual = _gameState$conceptCar3.visual, platform = _gameState$conceptCar3.platform; var review = "Graphics: ".concat(score, "/10\n"); // Special case combinations - pick only one now if (visual === 'ASCII' && platform === 'VR') { var options = ["ASCII art in VR is certainly... a choice. While most players reported immediate nausea from trying to parse text characters in 3D space, a small but vocal community calls it \"revolutionary\" and \"the Dark Souls of visual design.\" The flickering terminal aesthetic certainly enhances the horror elements, though distinguishing enemies from walls remains a challenging gameplay feature.", "The bold decision to render three-dimensional space with nothing but ASCII characters has created what medical professionals are now calling 'Terminal Vision Syndrome.' Players report seeing command prompts overlaid on reality after just 20 minutes of gameplay. Some have started dreaming in monospace font.", "Experiencing walls of text in virtual reality creates a peculiar type of motion sickness previously unknown to science. Yet somehow, a dedicated community has emerged claiming the 'textural purity' offers an unmatched immersive experience. We're not convinced they're not all suffering from Stockholm syndrome."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else if (visual === 'PowerPoint' && platform === 'VR') { var options = ["Experiencing PowerPoint transitions in virtual reality is exactly as disorienting as it sounds. The 'spinning newspaper' effect has been officially classified as a psychological weapon in three countries. Players report seeing phantom bullet points for days after sessions.", "The combination of slide transitions and VR head movement has resulted in the first game that requires a medical waiver. The 'star wipe to reality' effect has been banned in competitive play due to the unfair advantage it gives to players immune to vestibular disruption.", "PowerPoint animations experienced in full VR immersion have created a new category of sensory experience that psychologists are struggling to classify. The 'checkerboard dissolve' transition between levels has become a new therapy technique for treating certain phobias."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else if (visual === 'Claymation' && platform === 'Blockchain') { var options = ["Each handcrafted clay frame exists as an NFT, meaning the animation depends entirely on blockchain validation. When network traffic is high, characters move like they're trapped in digital molasses. The artists' fingerprints visible in the clay are now selling as separate collectibles.", "The blockchain verification process means each claymation frame must be individually validated, creating what players describe as a 'stop motion experience where the stop is mostly what you get.' During peak network congestion, the game effectively becomes a slideshow of lovingly crafted clay figures frozen in existential terror.", "The marriage of claymation and blockchain creates the unique scenario where character animations cost actual money to execute. Players report budgeting 'movement allowances' for different game sessions, with some choosing to keep characters completely still during non-essential scenes to save on gas fees."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else if (visual === 'Realistic' && platform === 'Smart Watch') { var options = ["Squeezing photorealistic graphics onto a watch screen creates a peculiar effect where everything looks simultaneously incredibly detailed and completely indecipherable. It's like viewing the Mona Lisa through a keyhole while running past it.", "The attempt at photorealism on a 1.5-inch screen has created the gaming equivalent of trying to watch Lawrence of Arabia on a postage stamp. Players report developing unprecedented squinting muscles and a new appreciation for abstract art.", "The photorealistic visuals compressed onto a watch face have created what ophthalmologists are calling 'micro-eye strain' - a condition where your eyes hurt not from looking at something too big, but from attempting to appreciate minute details on something absurdly small."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else { // Add ONE visual style comment if available if (visual && visualComments[visual]) { var options = visualComments[visual]; review += options[Math.floor(Math.random() * options.length)] + " "; } // Add ONE platform comment if available if (platform && platformComments[platform]) { var options = platformComments[platform]; review += options[Math.floor(Math.random() * options.length)] + " "; } } // Add ONE coherence or bug comment if applicable, not both if (gameState.codeCoherence < 50 && Math.random() < 0.7) { var lowCoherenceComments = ["The visual glitches are either artistic genius or concerning system failures - we're not entirely sure which. The 'wavy reality' effect seems less intentional and more like the rendering engine is having an existential crisis.", "Textures have developed the disturbing habit of occasionally swapping places, resulting in NPCs with brick faces and buildings with human skin. The developers insist this is 'dynamic environmental storytelling.'", "Visual elements randomly phase in and out of existence like quantum particles, which the marketing department has retroactively branded as 'Schrรถdinger rendering technology.'", "The game's graphics routinely bend in ways that suggest the rendering engine is questioning the nature of reality. Characters occasionally turn inside-out during cutscenes, which the developers claim is 'emotional expression through topological transformation.'", "Assets frequently forget which dimension they belong to, creating scenes where background elements casually stroll through foreground conversations. The patch notes insist this is an 'interactive storytelling breakthrough.'"]; review += lowCoherenceComments[Math.floor(Math.random() * lowCoherenceComments.length)] + " "; } else if (gameState.bugs > 5 && Math.random() < 0.7) { var highBugComments = ["The numerous visual bugs have been claimed as \"dynamic art features\" by the development team, who are now mysteriously all using the job title 'Accidental Art Director.'", "Character models occasionally contort into geometrically impossible shapes that mathematician M.C. Escher would find disturbing. These have been rebranded as 'surprise flexibility mechanics.'", "Visual elements frequently clip through each other in ways that defy not just game design but several laws of physics. The resulting Lovecraftian imagery could qualify the game for the horror genre regardless of its actual content.", "Z-fighting issues occur with such rhythmic consistency that players have set the flickering textures to music. The resulting community-created content has spawned three remix albums and a small festival.", "Lighting errors create such dramatic shadow effects that some scenes resemble expressionist German cinema from the 1920s. Critics can't agree if it's a bug or the most innovative visual direction in recent gaming history."]; review += highBugComments[Math.floor(Math.random() * highBugComments.length)] + " "; } // Apply smart truncation review = smartTruncateReview(review, 500) + "\n\n"; return review; } function generateGameplayReview(score) { // Mechanic-specific comments var mechanicComments = { 'Gacha': ["The gacha mechanics have been finely tuned to extract maximum revenue while still technically qualifying as 'entertainment' rather than 'gambling' in most jurisdictions.", "Random reward systems trigger dopamine responses with the precision of a neurosurgeon wielding a slot machine instead of a scalpel.", "The pity system ensures players always get something good eventually, with 'eventually' mathematically calculated to be just before they abandon the game entirely."], 'Physics-based': ["The physics engine operates on principles that suggest the developers have either never encountered actual physics or have discovered laws of motion unknown to science.", "Object interactions create emergent gameplay moments ranging from 'delightfully unexpected' to 'catastrophically glitched,' often within the same second.", "Momentum and gravity have been implemented with just enough accuracy to be predictable but not enough to prevent hilarious ragdoll failures that players now deliberately trigger."], 'Deckbuilding': ["The card system offers enough strategic depth that players can convince themselves their losses are due to bad luck rather than poor decision-making.", "Synergies between cards create combinations powerful enough to make players feel like geniuses for discovering what the developers intentionally designed.", "The meta evolves at a pace carefully calculated to maximize both engagement and the obsolescence of previously valuable cards."], 'Match-3': ["The match-three mechanics have been refined to the point where players enter a trance-like state, emerging hours later with no memory but mysteriously completed objectives.", "Tile-swapping creates a hypnotic effect that neuroscientists describe as 'concerningly addictive' and 'probably should be regulated.'", "Special combos trigger screen effects flashy enough to be visible from space, or at minimum, from across the room where concerned family members gather."], 'Auto-battler': ["The auto-battler system allows players to experience the unique joy of setting up a strategy and then watching it fail spectacularly without their intervention.", "Combat automation creates the perfect illusion of strategy while actually relying on statistical probabilities that would make casino owners blush.", "The hands-off approach to gameplay raises existential questions about what players are even doing here, questions the developers wisely avoid addressing."], 'Dungeon Crawler': ["The procedurally generated dungeons create endless unique experiences that somehow all start feeling exactly the same after about three hours.", "Level designs balance challenge and reward with the precision of a drunk tightrope walker who occasionally makes it across through sheer luck.", "The risk-reward system encourages players to push just one room further, a decision they consistently report regretting immediately thereafter."], 'Roguelike': ["The permadeath system teaches valuable lessons about loss, impermanence, and the human capacity for self-torture disguised as entertainment.", "Run-based progression creates a gameplay loop addictive enough that players report dreaming about 'just one more run' while actively in the middle of a run.", "Random elements ensure no two playthroughs are alike, though players will still blame the RNG rather than their skills for consistent failures."], 'Turn-Based': ["The turn-based combat system gives players unlimited time to make decisions they'll immediately regret once executed.", "Strategic depth is achieved through a complex system of rock-paper-scissors where rock occasionally transforms into dynamite without warning.", "Action queuing allows for elaborate plans that enemies subsequently dismantle with the casual efficiency of a chess grandmaster playing against a toddler."], 'Tower Defense': ["The tower defense mechanics tap into the primal human satisfaction of watching automated systems obliterate waves of enemies while you do absolutely nothing.", "Strategic tower placement creates a false sense of control in a genre that's essentially about watching numbers go down while pretty visual effects happen.", "The escalating wave difficulty follows a curve precisely designed to make players feel both challenged and competent until the inevitable difficulty cliff they're not warned about."] }; // Genre-specific comments var genreComments = { 'Horror': ["The horror elements range from genuinely unsettling to accidentally hilarious, sometimes achieving both states simultaneously through particularly buggy monster animations.", "Atmospheric tension has been crafted with such effectiveness that players report feeling anxious even during loading screens and menu navigation.", "Psychological terror builds through masterful pacing that knows exactly when to release tension, which is apparently never based on player heart rate monitors."], 'Dating Sim': ["The romance options offer enough variety that players can explore their taste in fictional partners without the inconvenience of actual human connection.", "Character development arcs are surprisingly nuanced for a game where success is measured by whether digital entities agree to go on pretend dates with you.", "The dialogue trees branch with enough complexity that players can fail at virtual relationships in ways they haven't even managed in real life yet."], 'RPG': ["The role-playing elements offer just enough statistical complexity to make spreadsheet enthusiasts feel their skills are finally being appreciated.", "Character progression systems provide that perfect dopamine hit of watching numbers go up while your actual life achievements remain static.", "Questlines branch with such complexity that completing the main story requires either a photographic memory or an unhealthy relationship with online wikis."], 'Educational': ["The learning mechanics successfully disguise education as entertainment, tricking players into absorbing knowledge with only minimal psychological scarring.", "Instructional content is integrated so seamlessly that players may not realize they're learning until they unexpectedly display knowledge in real-world situations.", "The balance between fun and education has been struck with all the precision of a blindfolded marksman who occasionally hits the target through statistical probability."], 'Battle Royale': ["The last-player-standing format taps into humanity's basest competitive instincts while somehow remaining just socially acceptable enough to discuss at dinner parties.", "The shrinking play area creates a physical manifestation of anxiety that players willingly subject themselves to for reasons psychologists are still studying.", "Random loot distribution ensures that skill matters, but not quite as much as being blessed by the capricious gods of RNG."], 'Idle Clicker': ["The incremental gameplay loop creates the perfect illusion of progress while requiring just enough player interaction to technically qualify as a 'game.'", "Number-go-up mechanics have been refined to the point where watching values increase feels like a genuine accomplishment deserving of pride.", "Automation features allow the game to essentially play itself, raising philosophical questions about what players are even doing here that the developers wisely avoid addressing."], 'Open World': ["The expansive map creates a sense of freedom and possibility that lasts until players realize they're still ultimately following prescribed paths designed by developers.", "Environmental storytelling is implemented with such subtlety that players may miss 90% of it while focusing on collecting arbitrary items scattered across the landscape.", "The sandbox design offers unprecedented player agency, which most use to ignore the main questline and instead create elaborate scenarios involving physics glitches."], 'Casual': ["The pick-up-and-play mechanics have been crafted to be accessible enough for anyone to enjoy but deep enough that players can convince themselves it's a worthwhile use of time.", "Simple gameplay loops create a soothing experience that mental health professionals describe as 'technically less harmful than most coping mechanisms.'", "Low-stakes challenges provide just enough accomplishment to trigger satisfaction without the inconvenience of actual effort or skill development."], 'Shooter': ["The gunplay mechanics have been tuned to create that perfect satisfaction of point-and-click destruction without the moral complications of actual violence.", "Weapon feedback uses audio-visual cues to trigger pleasure responses with the precision of behavioral scientists who chose game development over ethics committees.", "The arsenal variety creates an illusion of strategic depth in a genre fundamentally about making things go boom in progressively more spectacular ways."] }; var _gameState$conceptCar4 = gameState.conceptCards, mechanic = _gameState$conceptCar4.mechanic, genre = _gameState$conceptCar4.genre, platform = _gameState$conceptCar4.platform; var review = "Gameplay: ".concat(score, "/10\n"); // Special combinations - pick only one if (mechanic === 'Gacha' && genre === 'Horror') { var options = ["The horror elements work surprisingly well with the gacha mechanics. Nothing says terror like spending real money and getting your 15th duplicate character. The \"Despair Meter\" that fills as you pull more common items is genuinely anxiety-inducing. We're particularly impressed by the pity system that activates only after you've spent enough to finance a small car.", "The psychological horror of the gacha system creates genuine dread as players face the twin terrors of poor drop rates and dwindling bank accounts. The rare character summon animation that occasionally shows your real-life financial statements is a particularly cruel touch.", "Fusion of horror and gacha creates the unique experience of being frightened both by the game's monsters and by your credit card statements. The special 'financial horror' game mode where pull rates decrease in proportion to your remaining savings is diabolically inventive."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else if (platform === 'Smart Fridge' && genre === 'Horror') { var options = ["Turning your refrigerator into a portal of terror is innovative, if impractical. The jump scares are particularly effective when you're just trying to get a midnight snack. The game's ability to adjust scare timing based on how often you open the door for comfort food creates a diabolical feedback loop of terror and hunger.", "Horror experienced via refrigerator creates a unique form of domestic terror. The game's integration with the temperature controls means particularly frightening scenes are accompanied by an actual cold chill. Several players report developing a Pavlovian fear response to the sound of their fridge's compressor starting.", "The kitchen-based horror experience fundamentally changes your relationship with food storage. Players report checking behind yogurt containers for monsters and approaching the vegetable crisper with trepidation. The feature that slightly moves food items between gaming sessions is psychological warfare in appliance form."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else { // Add ONE mechanic comment if available if (mechanic && mechanicComments[mechanic]) { var options = mechanicComments[mechanic]; review += options[Math.floor(Math.random() * options.length)] + " "; } // Add ONE genre comment if available if (genre && genreComments[genre]) { var options = genreComments[genre]; review += options[Math.floor(Math.random() * options.length)] + " "; } } // Apply smart truncation review = smartTruncateReview(review, 500) + "\n\n"; return review; } function generateTechnicalReview(score) { // Platform-specific technical comments var platformComments = { 'VR': ["The virtual reality implementation manages to occupy that perfect technical sweet spot where your PC's fans sound like a jet engine while your stomach feels like it's on a boat. Players report developing 'VR arms' - the peculiar muscle memory of knowing exactly how far they can swing before hitting actual furniture.", "The technical achievement of rendering a world while simultaneously tracking head movements results in an experience that's halfway between immersion and motion sickness. The framerate prioritization system intelligently sacrifices visual quality whenever you look at anything interesting.", "The headset integration demonstrates the technical marvel of convincing your brain you're somewhere else while your body experiences the unique discomfort of having a small computer strapped to your face. Cable management has become its own meta-game."], 'Mobile': ["The technical optimization makes remarkable use of your phone's processing power, primarily by turning it into a hand warmer that occasionally displays pixels. Battery life is measured in either minutes or temperature increases, whichever comes first.", "Touch input responsiveness has been calibrated to the exact sweet spot between 'too sensitive' and 'completely unresponsive,' often achieving both states simultaneously depending on how important the current action is to gameplay.", "The app's memory management is a technical marvel, somehow managing to consume every available system resource while still periodically crashing due to lack of memory. Push notifications arrive with perfect timing to disrupt critical gameplay moments."], 'Console': ["The technical implementation pushes home entertainment hardware to its limits, with fan noise levels that successfully drown out the actual game audio. Loading screens are precisely timed to be just short enough that you don't get up, but long enough to question your life choices.", "Firmware integration achieves the remarkable feat of requiring system updates exclusively when you have limited play time. The hardware utilization curve suggests the development team may have misunderstood the concept of 'optimization' as 'making the hardware suffer as much as possible.'", "The technical architecture makes innovative use of the console's unique capabilities, predominantly by ignoring most of them in favor of universal cross-platform compatibility. Controller battery life decreases in inverse proportion to the importance of current gameplay moments."], 'PC': ["The system requirements list reads like a hardware wishlist rather than actual technical specifications, with the recommended GPU being 'whatever isn't publicly available yet.' The settings menu offers 58 adjustable parameters, none of which appear to make any noticeable difference to performance.", "The PC port demonstrates remarkable technical innovation by running differently on every single machine. Players report unique crash experiences that the developers are calling 'personalized technical storytelling' rather than 'insufficient QA testing.'", "Graphics options include helpful presets labeled 'Slideshow,' 'Barely Playable,' and 'Will Probably Catch Fire,' with the ultra settings clearly designed for hardware that won't exist until 2027. The auto-detect feature has achieved sentience and now actively mocks your components."], 'Web Browser': ["The browser-based engine demonstrates the technical achievement of working almost identically across all major browsers, creating similarly disappointing experiences regardless of your preferred internet portal. The memory leak has been labeled a 'persistent world feature.'", "Cross-browser compatibility has been achieved through what appears to be forbidden technical sorcery, though Chrome still manages to consume RAM as if it's being paid by the gigabyte. The 'reload on crash' function has been used so frequently it deserves its own dedicated keyboard shortcut.", "JavaScript optimization reaches previously unknown heights of technical brilliance, somehow making both high-end gaming rigs and corporate workstations struggle equally. Tab management has evolved into its own meta-game, with the constant risk of accidental navigation serving as the primary source of tension."], 'Blockchain': ["The technical implementation successfully ensures that every minor game action requires enough electricity to power a small village. The distributed architecture guarantees that simple operations which would take milliseconds on a regular platform instead involve thousands of computers performing cryptographic calculations.", "The blockchain verification system creates an innovative technical delay between player actions and their consequences, which the developers have retroactively branded as 'strategic contemplation time' rather than 'waiting for transaction confirmation.'", "The distributed ledger architecture achieves the technical marvel of making simple database lookups cost actual money. The developers have pioneered a new metric called 'performance per kilowatt-hour' which somehow manages to be simultaneously impressive and horrifying."], 'Smart Fridge': ["The refrigeration unit integration achieves the technical breakthrough of using CPU heat to fight the appliance's primary cooling function, creating a self-defeating loop of efficiency that physicists are still trying to understand. Ice cube generation algorithms slow dramatically during graphics-intensive sequences.", "Temperature management systems display remarkable technical coordination, cooling game assets alongside actual food items with varying degrees of success. Several players report milk spoilage directly proportional to gameplay session length.", "The technical architecture leverages the appliance's unique capabilities, with loading times carefully synchronized to door opening events. The vegetable crisper drawer now doubles as an emergency heat sink during particularly demanding gameplay sequences."], 'Smart Watch': ["The wrist-mounted implementation demonstrates the technical achievement of displaying recognizable graphics on a screen the size of a postage stamp. Touch precision has been calibrated to the exact width of fingers significantly wider than any interactive elements.", "Battery optimization represents a technical breakthrough in the field of 'barely functional.' The aggressive power management ensures gameplay sessions end precisely when reaching critical moments, with a helpful 'low battery' notification obscuring the screen seconds before shutdown.", "The processing architecture makes innovative use of the limited chipset, primarily by offloading calculations to the user's patience. The haptic feedback system has been finely tuned to either be completely imperceptible or startle you into dropping your arm."], 'Metaverse': ["The persistent world architecture demonstrates the technical marvel of maintaining stability while simultaneously ensuring that no two users ever experience the same version of reality. Desynchronization has been retroactively classified as a 'perception filter' feature.", "Cross-platform avatar systems achieve the technical feat of making your digital representation look equally uncanny regardless of what device you're using. Physics calculations take place across distributed servers in what appears to be different timelines.", "The technical infrastructure exhibits the remarkable ability to consume bandwidth as if it's a competitive sport. Social proximity voice chat has been calibrated to ensure you hear primarily breathing, background conversations, and inexplicable static from nearby users."] }; // Feature-specific comments var featureComments = { 'Cloud Save': ["The cloud synchronization works with the reliability of weather forecasting, occasionally causing data rain where you least expect it.", "Cross-device progression functions seamlessly when it works and creates existential crises when it doesn't, with saved games occasionally entering quantum states of both existence and non-existence.", "The backup system ensures player data is theoretically safe, though the recovery process requires technical knowledge roughly equivalent to a computer science minor."], 'Microtransactions': ["The monetization model has been designed with the subtle touch of a carnival barker with a psychology degree, making wallets open through carefully calibrated frustration thresholds.", "Optional purchases range from purely cosmetic to suspiciously advantageous, with price points carefully calculated to seem reasonable until you do the actual math.", "The premium currency exchange rate uses numerical values specifically chosen to make real-world cost calculations just inconvenient enough to discourage them."], 'AI Companions': ["The artificial intelligence creates companions just smart enough to be helpful but just dumb enough to remind you they're not real people, a balance the developers hit entirely by accident.", "NPC behavior patterns use machine learning to simulate human interaction with all the authenticity of a customer service chatbot that's having an off day.", "The companion system creates the perfect illusion of relationship without the messy complications of actual human connection, a feature psychologists are still debating the implications of."], 'Procedural Generation': ["The algorithmic content creation ensures infinite variety with the small caveat that everything starts looking suspiciously similar after about five hours.", "Randomized elements combine in ways mathematically calculated to be unique while still somehow producing the same fundamental experience with slight cosmetic variations.", "The generative systems create emergent scenarios ranging from 'surprisingly compelling' to 'obviously machine-made nonsense,' often within the same gameplay session."], 'NFT Integration': ["The blockchain collectibles add a layer of artificial scarcity to digital items, solving a problem that absolutely no one had in the first place.", "Token ownership provides players with the unique experience of paying real money for proof they own something that fundamentally cannot be owned in any meaningful sense.", "The NFT marketplace creates an economy where value is determined by a complex algorithm combining hype, FOMO, and statistically improbable optimism about future worth."], 'Multiplayer': ["The online functionality connects players globally with the primary purpose of enabling strangers to question each other's gaming abilities, ancestry, and moral character.", "Server infrastructure handles player interactions with the reliability of a weather vane in a hurricane, occasionally working perfectly and other times creating lag so bad it borders on time travel.", "The matchmaking system uses sophisticated algorithms to ensure teams are balanced in theory while actual games range from nail-biting competition to one-sided massacres."], 'VR Support': ["The virtual reality integration creates an immersive experience for those players willing to strap expensive technology to their faces and spin around their living rooms knocking over lamps.", "Motion controls translate real movements into game actions with an accuracy ranging from 'surprisingly precise' to 'wildly interpretive dance.'", "The spatial audio creates such convincing 3D sound that players consistently respond to in-game noises as if they were occurring in their actual environment, much to the confusion of pets and family members."], 'Cross-Platform': ["The multi-device compatibility ensures players can enjoy the same frustrations across all their expensive hardware with only minor variations in performance and stability.", "Account synchronization works across platforms with the seamless integration of puzzle pieces from different sets that have been forced together through sheer corporate determination.", "The unified ecosystem creates a consistent experience regardless of platform, though 'consistent' sometimes means 'consistently problematic' depending on the device generation."], 'Offline Mode': ["The disconnected gameplay option ensures entertainment continues even during internet outages, though achievement tracking enters a quantum state of uncertainty until connectivity resumes.", "Local play functions independently from online services with only minor feature reductions that players discover at exactly the most inconvenient moments.", "The offline capabilities create a safety net for those with unreliable internet, though the game still somehow knows exactly when you're trying to cheat the system."] }; var _gameState$conceptCar5 = gameState.conceptCards, platform = _gameState$conceptCar5.platform, feature = _gameState$conceptCar5.feature; var review = "Technical Performance: ".concat(score, "/10\n"); // Special platform-feature combinations - pick only one if (platform === 'Blockchain' && feature === 'Cloud Save') { var options = ["Storing save files on the blockchain works flawlessly, assuming you don't mind paying gas fees every time you want to save your progress. Each save point costs roughly the same as a nice dinner. Players now face the existential question of whether their gameplay is worth the environmental impact of storing their inventory data on thousands of computers worldwide.", "The blockchain-based save system creates the world's first gaming experience where your saves are technically public property. Each checkpoint requires a transaction fee that fluctuates wildly based on network congestion, leading to players developing elaborate 'save strategies' to minimize costs. The in-game economy is now less volatile than the actual save system.", "Combining blockchain validation with cloud saving creates the unique technical achievement of making game preservation simultaneously permanent and prohibitively expensive. Players report budgeting 'save allowances' and developing anxiety around in-game checkpoints that exceeds the tension of actual gameplay."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else if (platform === 'VR' && feature === 'Offline Mode') { var options = ["The offline VR mode functions perfectly, though players report a creeping suspicion that the game is watching them even when their internet is disconnected. Multiple users have reported finding the headset facing a different direction than they left it, a bug the developers insist is 'just your imagination' despite mounting video evidence.", "The disconnected virtual reality experience creates an unsettling sense of isolation that enhances certain gameplay elements. The technically impressive 'presence detection' that pauses when you remove the headset occasionally activates even when nobody is in the room, a feature the developers insist is 'working as intended.'", "The offline implementation allows for a fully immersive experience without connectivity concerns, though several users report receiving in-game messages specifically referencing their real-world activities while disconnected. The developers' explanation that this is 'predictive content generation' seems insufficient given the specificity of these references."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else if (platform === 'Smart Fridge' && feature === 'Multiplayer') { var options = ["The fridge-to-fridge multiplayer functionality works seamlessly, creating the world's first kitchen appliance social network. The matchmaking system that pairs players based on their food contents has created some unlikely friendships between people with similar condiment preferences and bizarre late-night eating habits.", "The networked refrigerator experience connects players through the shared language of food storage. The technical achievement of maintaining stable connections between appliances primarily designed to keep milk cold cannot be overstated. The 'food trading' feature that allows exchanging virtual representations of actual refrigerated items walks a fine line between innovative and concerning.", "The cross-appliance connectivity transforms kitchen fixtures into social hubs. The matchmaking algorithm that analyzes actual food contents to connect players with 'compatible culinary auras' is either the pinnacle of technical innovation or deeply invasive. Either way, the resulting kitchen-based communities are surprisingly wholesome."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else { // Platform-specific technical commentary - pick only one if (platform && platformComments[platform]) { var options = platformComments[platform]; review += options[Math.floor(Math.random() * options.length)] + " "; } // Feature-specific technical notes - pick only one if (feature && featureComments[feature]) { var options = featureComments[feature]; review += options[Math.floor(Math.random() * options.length)] + " "; } } // Add ONE coherence or bug comment if applicable, not both if (gameState.codeCoherence < 30 && Math.random() < 0.7) { var lowCoherenceVibeComments = ["The glitch aesthetic adds an unintentionally authentic layer of digital decay. The technical inconsistencies create a uniquely unstable atmosphere that feels like playing inside a slowly corrupting file.", "The frequent visual anomalies establish a distinctly unsettling vibe. The unpredictable technical behavior creates an atmosphere of digital uncertainty that feels strangely appropriate.", "The persistent rendering issues create a peculiarly dreamlike ambiance. The technical instability produces an accidentally surreal atmosphere where reality itself seems conditionally rendered.", "The numerous graphical inconsistencies deliver a uniquely janky charm. The technical hiccups create an atmosphere of computational struggle that feels oddly personified.", "The constant visual artifacts establish an accidentally avant-garde aesthetic. The technical limitations create an unintentionally experimental vibe that digital artists might intentionally try to replicate."]; review += lowCoherenceVibeComments[Math.floor(Math.random() * lowCoherenceVibeComments.length)] + " "; } else if (gameState.bugs > 7 && Math.random() < 0.7) { var highBugComments = ["Bugs have evolved into features so seamlessly that we're no longer sure which is which. The development roadmap now apparently consists of waiting to see which glitches players enjoy and retroactively claiming they were intentional.", "The game contains so many interconnected bugs that fixing one creates three more, leading to the development team embracing a 'digital ecosystem' approach where bugs are treated as protected species essential to the game's environment.", "Technical issues have been incorporated into the lore so thoroughly that the most dedicated players now deliberately trigger glitches as spiritual experiences. The subreddit features daily 'bug worship' threads.", "Glitches occur with such consistent frequency that speedrunners have developed a taxonomy to classify them, complete with Latin nomenclature. The community now speaks of bugs as naturalists would discuss rare butterflies, with similar reverence and cataloging effort.", "The error states have become so numerous and specific that they've developed into their own progression system. Players proudly share screenshots of particularly rare crash messages, with the 'Schrรถdinger Exception: Object exists and doesn't exist simultaneously' being the most coveted achievement."]; review += highBugComments[Math.floor(Math.random() * highBugComments.length)] + " "; } // Apply smart truncation review = smartTruncateReview(review, 500) + "\n\n"; return review; } function generateInnovationReview(score) { // Platform-specific innovation comments var platformInnovations = { 'VR': ["The virtual reality implementation pushes boundaries by completely ignoring conventional design wisdom about motion sickness, creating an experience that players describe as 'revelatory' once they stop feeling nauseated.", "Spatial gameplay mechanics use the three-dimensional environment in ways that make traditional flat-screen gaming seem positively prehistoric, though possibly with good evolutionary reasons.", "The immersive approach to VR creates unprecedented player embodiment, with several users reporting they tried to lean on virtual objects and fell in their actual living rooms."], 'Mobile': ["The mobile design innovates by treating touch input as an actual interface method rather than a poor substitute for buttons, though this appears to have been an accidental breakthrough.", "Phone-specific features use device capabilities in ways the hardware engineers definitely didn't anticipate and might not approve of if consulted.", "The portable experience creates a gameplay loop specifically designed for attention spans that have been systematically destroyed by the very platform it operates on."], 'Console': ["The console implementation leverages controller haptics in ways that border on inappropriate physical relationships with inanimate objects, creating unprecedented immersion.", "System-specific optimizations push the hardware to limits that warranty providers describe as 'technically covered but morally questionable.'", "The living room experience has been crafted for optimal couch play, though testing suggests most players end up unconsciously leaning so far forward they might as well be standing."], 'PC': ["The computer version innovates primarily through system requirements that appear to have been written by optimists, futurists, or possibly time travelers with access to unreleased hardware.", "Keyboard and mouse controls use so many simultaneous key combinations that pianist skills are heavily recommended in the very small print of the manual's appendix.", "Modding support opens the community creativity floodgates, ensuring the game will eventually contain content that keeps the legal department awake at night."], 'Web Browser': ["The browser-based approach pushes HTML5 capabilities to breaking points previously thought theoretical, revealing both the promise and concerning limitations of web technologies.", "Cross-browser compatibility has been achieved through coding practices that developers describe as 'technically working' and 'probably not causing long-term security vulnerabilities.'", "The no-download approach creates unprecedented accessibility, allowing players to experience crashes and performance issues without the inconvenience of installation."], 'Blockchain': ["The distributed ledger implementation creates unique ownership models that solve problems no one actually had while introducing several exciting new ones.", "Decentralized architecture ensures no single entity controls the experience, though mysterious collectives of crypto enthusiasts may effectively determine your gameplay fate.", "The token-based ecosystem innovates by making simple interactions both more complicated and more expensive, a breakthrough in user experience that wasn't actively sought."], 'Smart Fridge': ["The refrigerator interface creates a revolutionary fusion of gaming and food storage, allowing players to work up an appetite while simultaneously having snacks within arm's reach.", "Temperature-sensitive gameplay uses the appliance's cooling systems in ways that void warranties with remarkable efficiency and surprising entertainment value.", "The kitchen-based gaming experience breaks new ground by allowing family members to disapprove of both your gameplay choices and dietary habits simultaneously."], 'Smart Watch': ["The wrist-mounted experience innovates through extreme miniaturization that makes squinting a core gameplay mechanic, developing ocular muscles in unprecedented ways.", "Motion controls leverage accelerometers for gameplay that physical therapists describe as 'actively concerning for long-term wrist health.'", "The glanceable design creates a new category of micro-gaming sessions that fit perfectly between checking the time and ignoring notifications from actual human relationships."], 'Metaverse': ["The persistent virtual world pushes the boundaries of digital existence, creating spaces where players can experience the future of social interaction or the peak of technological gimmickry, depending on perspective.", "Cross-platform virtual presence allows unprecedented avatar expression, though most users still default to being implausibly attractive versions of themselves or bizarre anthropomorphic creatures.", "The interconnected experience creates digital spaces that exist perpetually, ensuring that embarrassing social interactions can now live forever instead of fading from memory."] }; // Visual style innovation comments var visualInnovations = { 'ASCII': ["The text-based visuals represent a bold return to computing's roots, proving definitively that contemporary graphics cards are essentially expensive space heaters for most gameplay needs.", "Character-based rendering creates a unique aesthetic that forces players' imaginations to do the heavy lifting, a form of outsourced processing that's remarkably efficient.", "The terminal style establishes a retro-future vibe that somehow manages to be simultaneously nostalgic and avant-garde, like vinyl records but for eyestrain."], 'Pixel Art': ["The deliberately limited resolution creates a visual language that proves more pixels don't necessarily make better art, just as more notes don't necessarily make better music.", "Carefully placed squares create an aesthetic that balances nostalgic familiarity with contemporary sensibilities, like comfort food prepared by a gourmet chef.", "The constrained palette forces creative solutions that turn technical limitations into stylistic triumphs, proving sometimes the box is actually where the best thinking happens."], 'Hand-drawn': ["The illustrated approach brings warmth and humanity to digital spaces, with imperfections that feel refreshingly authentic in an era of algorithmic perfection.", "Manually created visuals showcase the unique power of human artistic expression, though frame-by-frame animation suggests the possible involvement of interns with questionable labor contracts.", "The organic style creates a visual signature so distinctive it's effectively impossible to confuse with any other title, for better or occasionally much worse."], 'PowerPoint': ["The presentation software aesthetic innovates primarily by proving that games can technically be made with tools designed for quarterly sales reports, though whether they should be remains hotly debated.", "Slide-based design creates a unique pacing mechanism where transitions become gameplay events in themselves, with the 'star wipe' emerging as a fan favorite boss introduction.", "The corporate visual language creates an uncanny gaming experience where players report flashbacks to work meetings during particularly intense gameplay sequences."], 'Low-poly': ["The deliberately angular aesthetic creates a unique visual language that proves technical constraints can be artistic choices, though developers insist this was the plan all along.", "Faceted surfaces create a distinctive style that's simultaneously retro and timeless, like digital cubism for the gaming generation.", "The simplified geometry focuses attention on essentials rather than details, creating an experience where imagination fills gaps that polygons don't, sometimes with disturbing results."], 'Claymation': ["The stop-motion inspired visuals bring tangible physicality to digital space, with fingerprints and subtle imperfections that humanize the virtual experience.", "Frame-by-frame animation creates a distinctive rhythmic quality to movement that players describe as 'charmingly janky' or occasionally 'unsettlingly organic.'", "The handcrafted aesthetic establishes a unique visual identity in an industry dominated by polygons, though developers refuse to confirm rumors about actual clay consumption during crunch time."], 'Realistic': ["The photorealistic approach pushes technical boundaries to their limits, creating visuals so detailed that players report checking their graphics settings to confirm they're not actually watching videos.", "Lifelike rendering creates an immersive experience that occasionally crosses into uncanny valley territory, particularly during emotional scenes where characters look almost but not quite human enough.", "The high-fidelity visuals establish new standards for digital realism, though several players have reported existential crises after extended play sessions blurred their perception of actual reality."], 'Voxel': ["The cube-based construction system innovates by making every element of the world consistent with its building blocks, creating a universe that's simultaneously coherent and impossible.", "The blocky aesthetic creates a unique visual language where detail comes from arrangement rather than fidelity, proving creativity thrives within constraints.", "The volumetric approach bridges the gap between 2D and 3D design philosophies, creating spaces that feel simultaneously accessible and complex."], 'Demake': ["The deliberately downgraded visuals create a unique nostalgic experience that couldn't exist without first having the high-fidelity original to contrast against, making it both derivative and wholly original.", "Technical constraints are elevated to artistic choices, proving that limitation often breeds creativity more effectively than unlimited resources.", "The retrograde aesthetic creates a fascinating alternate history of gaming where different technological paths might have been taken, like digital archaeological experiments."] }; var review = "Innovation: " + score + "/10\n"; var concepts = gameState.conceptCards; // Check for particularly innovative combinations - pick only one if (concepts.platform === 'VR' && concepts.visual === 'ASCII') { var options = ["We've never seen anything like this, and that's either brilliant or terrifying. The combination of ASCII art in virtual reality creates an experience that defies conventional categorization. The 'pay-to-escape' mechanic where you can spend real money to skip particularly nauseating text segments is either predatory or genius. The developer's insistence that 'immersive typography is the future of gaming' might be visionary or completely delusional.", "The fusion of virtual reality and ASCII creates a sensory experience that neurologists are studying with great interest. Looking at walls of text in three-dimensional space has caused several playtesters to develop a new form of synesthesia where they 'taste' different letters. The developer's claim that this is 'expanding human consciousness through digital means' feels like a convenient reframing of what is essentially torture by typography.", "This bizarre combination of VR immersion and textual abstraction creates gaming's first genuine avant-garde movement. Players report experiencing the literal feeling of 'being inside language' - an effect that is equal parts profound and nauseating. The community that has formed around this experience communicates exclusively in parentheses and semicolons, claiming that traditional language 'no longer suffices after what they've seen.'"]; review += options[Math.floor(Math.random() * options.length)]; } else if (concepts.platform === 'Smart Fridge' && concepts.genre === 'Horror') { var options = ["Turning household appliances into portals of terror is genuinely innovative, if psychologically scarring. Late-night snacks will never be the same. The mechanic where in-game events affect your actual food temperature creates unprecedented real-world stakes. Several players reported throwing out perfectly good food because it 'gave them a bad feeling.' Psychological horror has never been so domestic.", "The refrigerator-based horror experience creates a uniquely invasive fear response by targeting the primal comfort of food access. The innovative 'condition-based events' that trigger specifically when you're hungry late at night demonstrates a sadistic understanding of human psychology. Multiple users now report checking behind their yogurt containers for monsters before breakfast.", "This unholy marriage of kitchen appliance and psychological terror has fundamentally changed the relationship between homeowners and their refrigerators. The revolutionary 'biometric fear response' system that tracks your actual heart rate through the door handle to determine when to trigger jump scares is either technical wizardry or a serious privacy concern. Either way, it's the first game that literally feeds on your fear."]; review += options[Math.floor(Math.random() * options.length)]; } else if (concepts.platform === 'Blockchain' && concepts.genre === 'Dating Sim') { var options = ["Combining blockchain technology with romance is certainly unique. Each rejection is permanently recorded on the blockchain, which is either brilliant or cruel. The 'proof-of-affection' system where players must solve increasingly complex mathematical problems to unlock romantic dialogue has created the world's first dating sim with actual barriers to entry. Several relationships have developed purely because neither party wanted to waste their computational investment.", "This bizarre fusion of cryptocurrency architecture and virtual romance has created the first dating simulator where emotional connections have actual monetary value. The 'smart contract relationship' system that requires financial penalties for breaking up has led to the fascinating social phenomenon of 'investment partners' - players who stay together not out of affection but because they've invested too much to back out. Digital romance has never been so financially ruinous.", "The blockchain dating experience introduces the innovative concept of 'romance mining,' where player interactions generate tokens that fluctuate in value based on relationship quality. The mechanic where other players can invest in your relationship, essentially becoming stakeholders in your love life, creates unprecedented social dynamics. Several couples now make decisions based on shareholder votes rather than personal preference."]; review += options[Math.floor(Math.random() * options.length)]; } else { // Platform innovations - pick only one if available if (concepts.platform && platformInnovations[concepts.platform]) { var options = platformInnovations[concepts.platform]; review += options[Math.floor(Math.random() * options.length)] + " "; } // Visual innovations - pick only one if available if (concepts.visual && visualInnovations[concepts.visual]) { var options = visualInnovations[concepts.visual]; review += options[Math.floor(Math.random() * options.length)] + " "; } } // Innovation bonus for high vibe points - pick only one if applicable if (gameState.vibePoints > 80 && Math.random() < 0.7) { var highVibeInnovations = ["The sheer audacity of the concept has created its own genre. Industry analysts are already scrambling to coin terminology for the wave of imitators that will inevitably follow.", "The development team's commitment to their bizarre vision has resulted in something so unique that it defies conventional game theory. Several game design textbooks are being rewritten to include sections called 'But Sometimes This Works Too.'", "The game exists in a category entirely its own, leaving critics struggling to find comparison points. The resulting semantic crisis has led to the establishment of new reviewing guidelines specifically addressing concept originality.", "The fundamental innovation on display has created something so unique that multiple game design programs are adding it to their curriculum as a case study in conceptual bravery. Future developers will likely reference this title when defending their own unusual concepts.", "The brilliant madness behind this creation demonstrates what happens when developers completely ignore market research and conventional wisdom. The result is something so distinct that it has created its own classification problem for digital storefronts, none of which have appropriate category tags."]; review += highVibeInnovations[Math.floor(Math.random() * highVibeInnovations.length)] + " "; } // Fallback innovation comments if review is too short if (review.length < 200) { var fallbackInnovations = { high: ["This concept brilliantly combines elements that shouldn't work together into something unexpectedly cohesive. The developers have created a new gameplay paradigm that defies conventional categorization, suggesting either remarkable foresight or a happy accident born from creative chaos.", "The audacious fusion of seemingly incompatible elements creates something genuinely fresh. While individual components are familiar, their implementation here feels revolutionary, as if someone deliberately ignored 'best practices' and stumbled onto something better.", "Innovation doesn't always mean inventing new mechanics, but rather combining existing ones in ways nobody thought to try. This title exemplifies that philosophy, bringing together disparate elements into something greater than the sum of its parts."], medium: ["While not revolutionary, the game offers several novel twists on familiar formulas. The creative combination of established mechanics with unexpected elements provides just enough innovation to distinguish it from similar titles.", "The concept shows admirable creativity in working within established frameworks while adding enough unique elements to feel fresh. It won't redefine genres, but it successfully carves out its own identity in a crowded market.", "There's innovation happening here, though more evolutionary than revolutionary. The development team has taken existing ideas and reconfigured them in ways that feel sufficiently novel without reinventing the wheel."], low: ["The innovation on display feels more accidental than intentional, as if the developers were aiming for something conventional but missed in ways that occasionally produce interesting results. These happy accidents don't quite compensate for the overall derivative nature.", "While attempting something different, the game struggles to transcend the sum of its borrowed parts. Occasional flashes of creativity peek through the familiar framework, but they're too sporadic to establish a truly innovative identity.", "The concept seems caught between innovation and imitation, resulting in an experience that never fully commits to either path. The occasional unique element gets lost amid overly familiar mechanics and systems."] }; // Select appropriate tier based on score var tier = "medium"; if (score >= 8) { tier = "high"; } else if (score <= 3) { tier = "low"; } // Add a fallback comment var options = fallbackInnovations[tier]; review += options[Math.floor(Math.random() * options.length)] + " "; } // Apply smart truncation review = smartTruncateReview(review, 500) + "\n\n"; return review; } function generateVibeReview(score) { // Platform-specific vibes var platformVibes = { 'VR': ["The virtual reality implementation creates a sense of presence that's both impressive and occasionally nauseating, like being physically transported into a world that doesn't quite understand how human bodies work.", "The immersive headset experience generates a unique feeling of embodiment that makes other games feel like watching through a window rather than being present in the space.", "The spatial presence achieved through VR creates an uncanny sense of physicality, though the occasional tracking glitches remind you that your digital body is just an approximation."], 'Mobile': ["The mobile experience creates an intimate connection through touch controls, making the game feel like it's literally in your hands rather than on a distant screen.", "The portable nature of the platform enables a uniquely ubiquitous presence, turning mundane moments like commutes and waiting rooms into opportunities for digital escape.", "The touch-based interface creates a direct manipulation that feels more personal than traditional controls, though occasionally your fingers obstruct the very world you're trying to interact with."], 'Console': ["The living room gaming experience creates a comfortable familiarity that feels like the digital equivalent of comfort food, served with professional polish.", "The controller-based interface strikes that perfect balance between precision and relaxation, allowing players to sink into their couches while maintaining complete control.", "The console environment creates a dedicated gaming bubble that feels distinctly separate from work and other responsibilities, an increasingly rare quality in our multi-purpose devices."], 'PC': ["The computer gaming experience creates a uniquely customizable vibe, with users tweaking settings until the game looks and performs exactly to their specifications, or until they've spent more time adjusting than playing.", "The desktop environment combines precision control with an office-chair intimacy that feels like having a personal relationship with your hardware as much as the game itself.", "The keyboard and mouse interface creates a tactile connection that feels simultaneously professional and playful, like wearing a business suit to an amusement park."], 'Web Browser': ["The browser-based environment creates a uniquely accessible atmosphere that feels weightless and ephemeral, a game that exists everywhere and nowhere simultaneously.", "The tab-based context creates a strangely compartmentalized experience that feels like it's always one click away from being replaced by email or social media, creating a constant subtle tension.", "The URL-accessed game carries a distinctly democratic vibe, requiring no installation or commitment beyond typing an address, though this casual relationship works both ways."], 'Blockchain': ["The distributed ledger foundation creates a strange value-infused atmosphere where every action feels simultaneously meaningless and potentially worth real money.", "The crypto-backed experience generates a unique tension between play and investment, where enjoyment is always colored by awareness of speculative value fluctuations.", "The tokenized environment creates an unusual sense of digital ownership that feels both empowering and absurd, like having a notarized deed to a cloud or sunrise."], 'Smart Fridge': ["The kitchen appliance platform creates a bizarrely domestic atmosphere that transforms food storage into entertainment, blurring the line between sustenance and distraction.", "The refrigerator interface establishes a uniquely situated experience that feels anchored to a specific household location, creating a strangely territorial relationship with the game.", "The cold storage gaming creates an atmosphere that literally changes the temperature of the room, with play sessions accompanied by wafts of chilled air and the subtle scent of leftovers."], 'Smart Watch': ["The wrist-mounted experience creates an intimate, almost secretive vibe that feels like carrying a tiny world with you everywhere, accessible with the subtlest glance.", "The watch interface establishes a uniquely constrained atmosphere where limitations become defining features rather than drawbacks, like haiku in interactive form.", "The glanceable gaming creates a fractured experience that exists in stolen moments throughout the day, creating a peculiarly integrated relationship between the game and daily life."], 'Metaverse': ["The persistent virtual world creates an uncanny atmosphere where digital space takes on properties of real estate, complete with territorial feelings and the strange concept of 'location' in infinitely replicable data.", "The shared online environment establishes a uniquely social vibe where the presence of others becomes part of the aesthetic, for better or worse.", "The avatar-mediated experience creates a layer of identity play that colors every interaction, where everyone is simultaneously themselves and a performance of themselves."] }; // Visual style vibes var visualVibes = { 'ASCII': ["The text-based visuals create a strangely literary atmosphere that engages the imagination in ways high-resolution graphics can't, like reading a book that occasionally reads back.", "The character-based representation establishes a uniquely abstracted vibe that feels simultaneously primitive and sophisticated, like cave paintings created by mathematicians.", "The monospace aesthetic creates a distinctly digital atmosphere that celebrates rather than hides its technological nature, unapologetically computational in its presentation."], 'Pixel Art': ["The deliberately limited resolution creates a nostalgic yet timeless vibe that feels like memories made tangible, blending retro aesthetics with contemporary sensibilities.", "The blocky visual language establishes a uniquely constrained beauty that finds expression through limitations rather than despite them.", "The pixel-perfect precision creates an atmosphere of handcrafted care, where each dot on the screen feels deliberately placed rather than procedurally generated."], 'Hand-drawn': ["The manual illustration style creates a warmly organic atmosphere that feels touched by human hands rather than rendered by algorithms.", "The drawn aesthetic establishes a uniquely expressive vibe where imperfections become signature elements rather than technical failings.", "The sketched visual language creates an atmosphere of artistic interpretation rather than simulation, representing reality through personal perspective rather than photographic accuracy."], 'PowerPoint': ["The presentation software aesthetic creates a bizarrely corporate atmosphere that transforms work tools into play spaces, like holding a rave in an office break room.", "The slide-based visual language establishes a uniquely fragmented vibe that feels like a business presentation having an existential crisis.", "The template-driven design creates an atmosphere of uncanny familiarity, taking the aesthetics of quarterly reports and team-building exercises into realms they were never meant to explore."], 'Low-poly': ["The angular visual style creates a distinctly geometric atmosphere that feels simultaneously retro and timeless, like digital origami.", "The faceted aesthetic establishes a uniquely abstracted vibe that suggests rather than depicts, allowing player imagination to smooth the edges.", "The reduced polygon count creates an atmosphere of elegant simplification, finding beauty in the essence of forms rather than their details."], 'Claymation': ["The stop-motion inspired visuals create a tactile atmosphere that feels physically crafted despite its digital nature, like holding something that doesn't actually exist.", "The malleable aesthetic establishes a uniquely organic vibe where imperfections become charming evidence of human creation rather than technical limitations.", "The handcrafted visual language creates an atmosphere of artisanal care, with fingerprints both literal and metaphorical visible throughout the experience."], 'Realistic': ["The photorealistic approach creates an atmosphere of technical ambition that constantly pushes against the boundaries of the uncanny valley, occasionally stumbling in fascinating ways.", "The lifelike visual language establishes a uniquely immersive vibe that aims to dissolve the barrier between player and game through sheer fidelity.", "The high-definition aesthetic creates an atmosphere of sensory detail that can be either breathtaking or overwhelming, depending on the moment and implementation."], 'Voxel': ["The cube-based construction creates a playfully systematic atmosphere that feels like a world made of digital LEGO, inviting interaction through its very form.", "The blocky aesthetic establishes a uniquely tactile vibe despite its digital nature, suggesting a world that could be physically built and manipulated.", "The volumetric visual language creates an atmosphere of consistent logic, where everything from mountains to monsters adheres to the same cubic principles."], 'Demake': ["The deliberately downgraded visuals create a fascinating alternate history vibe, like a glimpse into a timeline where different technological choices were made.", "The retroactively constrained aesthetic establishes a uniquely nostalgic atmosphere that feels both familiar and impossible, recognizable yet never actually existed.", "The artificially limited visual language creates an atmosphere of technological interpretation, translating modern ideas through historical limitations."] }; var review = "Vibe Factor: ".concat(score, "/10\n"); var concepts = gameState.conceptCards; // Special combination vibes - pick only one if (concepts.visual === 'ASCII' && concepts.platform === 'VR') { var options = ["The game oozes style, even if that style causes immediate discomfort. The pulsing green terminal text, the suspenseful beeping sounds, and the whispered ASCII art jumpscares all contribute to a cohesive, if bewildering, aesthetic.", "The fusion of retro terminal visuals with cutting-edge VR creates an atmosphere that's equal parts nostalgic and nauseating. The decision to render everything in phosphorescent green text creates the unique experience of feeling like you're trapped inside a 1980s hacker's fever dream.", "The deliberately jarring combination of primitive text art and immersive virtual reality creates a uniquely unsettling atmosphere. The contrast between the technological simplicity of ASCII and the sophistication of VR produces a digital uncanny valley effect that several art critics have described as 'intentionally hostile to human perception.'"]; review += options[Math.floor(Math.random() * options.length)] + " "; } else if (concepts.platform === 'Smart Fridge' && concepts.genre === 'Horror') { var options = ["The fusion of domestic appliance and psychological horror creates an unnervingly memorable atmosphere. The gentle hum of the fridge has never been more sinister.", "The juxtaposition of mundane kitchen appliance with terror elements creates a uniquely domestic dread. The subtle integration of cooling system sounds into the horror soundtrack transforms everyday refrigerator noises into anxiety triggers.", "The kitchen-based horror experience leverages the inherently liminal nature of late-night refrigerator visits to create unprecedented atmospheric tension. The soft interior light that flickers slightly longer than it should with each door opening has transformed a common household interaction into a moment of existential dread."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else if (concepts.platform === 'Blockchain' && concepts.visual === 'Claymation') { var options = ["The unlikely pairing of tactile claymation with intangible blockchain creates a fascinating aesthetic dissonance. The deliberately handcrafted visuals juxtaposed against the cold precision of distributed ledger technology produces a unique artistic tension.", "The contrast between the warmly organic claymation style and the sterile digital nature of blockchain technology creates a distinctly unsettling vibe. Characters feel simultaneously handcrafted and procedurally generated, existing in an artistic limbo that defies categorization.", "The handmade claymation aesthetic combined with blockchain's digital permanence creates a uniquely contradictory atmosphere. The visible fingerprints in character models tokenized as immutable digital assets creates an art form that exists at the intersection of artisanal craftsmanship and technological abstraction."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else { // Platform-specific vibes - pick only one if (concepts.platform && platformVibes[concepts.platform]) { var options = platformVibes[concepts.platform]; review += options[Math.floor(Math.random() * options.length)] + " "; } // Visual style vibes - pick only one if (concepts.visual && visualVibes[concepts.visual]) { var options = visualVibes[concepts.visual]; review += options[Math.floor(Math.random() * options.length)] + " "; } } // Vibe points influence - pick only one if applicable if (gameState.vibePoints > 90 && Math.random() < 0.7) { var highVibeComments = ["The game radiates an infectious energy that's impossible to ignore. The carefully crafted atmosphere creates a uniquely cohesive experience that remains consistent across every aspect of design.", "The overwhelming sense of style creates an instantly recognizable aesthetic fingerprint. Every element feels like part of a carefully orchestrated whole, creating a uniquely signature experience.", "The perfectly calibrated atmosphere achieves that rare quality of total cohesion. The game knows exactly what it wants to be and commits to that vision with unwavering confidence.", "The masterfully crafted ambiance establishes an immediate and distinct personality. This is a game that understands exactly what mood it wants to create and pursues that goal with remarkable consistency.", "The exceptional vibrance pervades every aspect of the experience. Rarely have we seen such a perfect alignment of visual design, sound, and gameplay feel creating such a distinctive sensory impression."]; review += highVibeComments[Math.floor(Math.random() * highVibeComments.length)] + " "; } else if (gameState.vibePoints < 50 && Math.random() < 0.7) { var lowVibeComments = ["The game's atmosphere is as coherent as a fever dream, which might be intentional. The wildly inconsistent tone creates a uniquely disorienting experience that defies categorization.", "The conflicting stylistic choices create a distinctly fractured ambiance. Different elements feel like they were designed in isolation from each other, creating an unintentionally surreal collage effect.", "The disjointed aesthetic elements establish a peculiarly inconsistent vibe. The game seems to be having an identity crisis in real-time, oscillating between multiple competing styles.", "The contradictory design language delivers a uniquely confused atmosphere. The game can't seem to decide what mood it's trying to establish, creating an accidentally avant-garde effect.", "The incoherent stylistic approach creates an atmosphere of digital schizophrenia. Playing feels like rapidly channel-surfing between completely unrelated experiences stitched together by tenuous gameplay mechanics."]; review += lowVibeComments[Math.floor(Math.random() * lowVibeComments.length)] + " "; } // Add coherence effects if applicable if (gameState.codeCoherence < 40 && Math.random() < 0.7) { var lowCoherenceVibeComments = ["The glitch aesthetic adds an unintentionally authentic layer of digital decay. The technical inconsistencies create a uniquely unstable atmosphere that feels like playing inside a slowly corrupting file.", "The frequent visual anomalies establish a distinctly unsettling vibe. The unpredictable technical behavior creates an atmosphere of digital uncertainty that feels strangely appropriate.", "The persistent rendering issues create a peculiarly dreamlike ambiance. The technical instability produces an accidentally surreal atmosphere where reality itself seems conditionally rendered.", "The numerous graphical inconsistencies deliver a uniquely janky charm. The technical hiccups create an atmosphere of computational struggle that feels oddly personified.", "The constant visual artifacts establish an accidentally avant-garde aesthetic. The technical limitations create an unintentionally experimental vibe that digital artists might intentionally try to replicate."]; review += lowCoherenceVibeComments[Math.floor(Math.random() * lowCoherenceVibeComments.length)] + " "; } // Fallback vibes if review is too short if (review.length < 200) { var fallbackVibes = { high: ["The game radiates a distinctly confident aura, maintaining its unique aesthetic across every aspect of design. From interface to gameplay mechanics, there's a cohesive vision that creates an immediately recognizable identity. Few titles achieve this level of stylistic consistency.", "The carefully crafted atmosphere demonstrates masterful understanding of mood and tone. Every element feels deliberately chosen to contribute to the overall sensory experience, creating an immersive world with its own internal logic and personality.", "There's a magnetic quality to the game's aesthetic that's difficult to quantify yet impossible to ignore. The developers have created something with genuine personality that leaves a lasting impression beyond the mechanical components."], medium: ["The game establishes a reasonably cohesive atmosphere, though occasional inconsistencies prevent it from achieving a truly distinctive identity. There's enough personality to make it memorable, even if the vibe isn't consistently maintained across all elements.", "While not revolutionary in its presentation, the game successfully cultivates a pleasant ambiance that enhances the core experience. The aesthetic doesn't break new ground, but it effectively supports the gameplay with appropriate mood and style.", "The vibe strikes a comfortable balance between familiar and fresh, creating an environment that feels welcoming yet still has its own character. It won't redefine aesthetic standards, but it demonstrates solid craftsmanship in establishing mood."], low: ["The game struggles to establish a consistent atmosphere, resulting in a fragmented experience where different elements feel stylistically disconnected. There are occasional moments of cohesion, but they're undermined by conflicting design choices.", "The inconsistent tone creates a disjointed vibe that never quite coalesces into something distinctive. Individual elements might work in isolation, but together they create an experience that lacks a clear aesthetic identity.", "There's a palpable sense that the game's atmosphere was an afterthought rather than a central consideration, with various components pulling in different stylistic directions. The resulting vibe feels muddled, occasionally working despite itself rather than by design."] }; // Select appropriate tier based on score var tier = "medium"; if (score >= 8) { tier = "high"; } else if (score <= 3) { tier = "low"; } // Add a fallback comment var options = fallbackVibes[tier]; review += options[Math.floor(Math.random() * options.length)] + " "; } // Apply smart truncation review = smartTruncateReview(review, 500) + "\n\n"; return review; } // Create a new function to generate the features section function generateFeaturesSection() { var featuresSection = ""; if (gameState.discoveredFeatures.length > 0) { featuresSection = "Notable Features\n"; gameState.discoveredFeatures.forEach(function (featureName, index) { featuresSection += "- " + featureName + ": " + gameState.featureStories[index] + "\n"; }); featuresSection += "\n"; } return featuresSection; } function generateAchievementSection(score) { // Only add achievements section for high scores or interesting combinations if (score < 65 && gameState.conceptCards.platform !== 'Smart Fridge' && !(gameState.conceptCards.visual === 'ASCII' && gameState.conceptCards.platform === 'VR')) { return ""; // Skip for lower scores with no interesting combinations } var achievements = []; var concepts = gameState.conceptCards; // Add title var section = "Notable Achievements\n"; // Check for specific combinations if (concepts.platform === 'VR' && concepts.visual === 'ASCII') { achievements.push("**Typography Torture Award**: First game to cause motion sickness using only the letter 'O'"); achievements.push("**Ophthalmologist's Best Friend**: Created unprecedented demand for eye therapy"); } if (concepts.platform === 'Smart Fridge' && concepts.genre === 'Horror') { achievements.push("**Midnight Snack Deterrent**: Reduced late-night eating by 87% among players"); achievements.push("**Domestic Terror Innovation**: First game to make opening your refrigerator a jump scare"); } if (concepts.platform === 'Blockchain' && concepts.genre === 'Dating Sim') { achievements.push("**Carbon Footprint Romeo**: Most environmentally damaging dating experience"); achievements.push("**Proof-of-Love Protocol**: Pioneered romance verification technology"); } if (concepts.visual === 'PowerPoint' && (concepts.genre === 'Battle Royale' || concepts.genre === 'Shooter')) { achievements.push("**Corporate Combat Certificate**: Transformed boring presentations into lethal entertainment"); achievements.push("**Star Wipe of Death**: Weaponized slide transitions successfully"); } // Specific feature achievements if (concepts.feature === 'Microtransactions' && score > 75) { achievements.push("**Wallet Vampire Award**: Most creative excuses for charging players"); achievements.push("**Monetization Innovation**: Discovered 17 new ways to extract money from willing players"); } if (concepts.feature === 'AI Companions' && gameState.codeCoherence < 60) { achievements.push("**Turing Test Failure**: AI companions indistinguishable from bugs"); achievements.push("**Digital Stockholm Syndrome**: Players forming attachments to clearly broken AI"); } if (concepts.feature === 'Cloud Save' && gameState.bugs > 5) { achievements.push("**Digital Afterlife**: Save files that continue playing without player input"); achievements.push("**Cloud Migration**: Game states that mysteriously appear in other players' games"); } // Bug-related achievements for games with high bug counts but good scores if (gameState.bugs > 6 && score > 70) { achievements.push("**It's Not a Bug Award**: Most successful rebranding of errors as features"); achievements.push("**Chaos Engineering Certificate**: Turning technical debt into player engagement"); } // High coherence achievements if (gameState.codeCoherence > 80 && score > 80) { achievements.push("**Technical Excellence**: Surprisingly functional given the concept complexity"); achievements.push("**Stability Wizard**: Maintained coherence despite logical impossibilities"); } // High vibe achievements if (gameState.vibePoints > 85) { achievements.push("**Vibe Architects**: Created inexplicable but undeniable digital atmosphere"); achievements.push("**Cult Following Creator**: Generated passionate community around bizarre concept"); } // If we have achievements, format them into the section if (achievements.length > 0) { // Take up to 4 achievements maximum var selectedAchievements = achievements.slice(0, 4); section += selectedAchievements.map(function (achievement) { return "- ".concat(achievement); }).join("\n"); section += "\n\n"; return section; } else { return ""; // Return empty string if no achievements } } function generateFinalThoughts(score, ratings) { var concepts = gameState.conceptCards; var review = "Final Thoughts\n"; // Special combination conclusions - expanded with more options if (concepts.platform === 'VR' && concepts.visual === 'ASCII') { var options = ["\"" + concepts.platform + " " + concepts.visual + " " + concepts.genre + "\" is the game nobody asked for but somehow can't stop talking about. It's created a niche community of players who now communicate exclusively in ASCII art and spend concerning amounts on virtual terminal upgrades.", "This unholy marriage of cutting-edge VR technology and 1970s terminal aesthetics should not work on any conceivable level, and yet it has cultivated a dedicated following who claim to have 'seen beyond the veil of conventional graphics.' Multiple ophthalmologists have issued statements specifically warning against extended play sessions.", "The baffling combination of immersive headset technology and primitive text characters has created gaming's first legitimate art-house cult experience. Players either quit within ten minutes or become evangelists who insist that 'you haven't really experienced digital consciousness until you've been inside the green text.'"]; review += options[Math.floor(Math.random() * options.length)] + " "; } else if (concepts.platform === 'Smart Fridge' && concepts.genre === 'Horror') { var options = ["This revolutionary fusion of kitchen appliances and psychological horror has forever changed how people approach midnight snacks. The game has spawned a community of food-based horror enthusiasts who now exclusively store their groceries in fear.", "The unexpected pairing of domestic refrigeration and existential dread has created a genuinely new gaming subgenre that makes routine kitchen activities into potential horror scenarios. Multiple players report installing additional lighting in their kitchens and developing new grocery organization systems specifically to minimize gameplay flashbacks.", "The brilliant insanity of turning a food storage device into a portal of terror demonstrates what happens when developers completely ignore convention. The resulting experience has transformed mundane midnight snacking into psychological endurance tests for players worldwide."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else if (concepts.platform === 'Blockchain' && concepts.genre === 'Dating Sim') { var options = ["Dating has never been more expensive or environmentally devastating. Each flirtation consumes enough electricity to power a small nation, yet players can't stop swiping right on decentralized romances. Relationship status: It's complicated (and on the blockchain).", "The baffling fusion of cryptocurrency infrastructure and virtual romance has created the world's first dating simulation where rejection carries actual financial consequences. Players report developing genuine emotional connections to digital characters, though it's unclear if this stems from authentic affection or the sunk cost fallacy after spending thousands on transaction fees.", "This conceptual contradiction between digital intimacy and distributed ledger technology has created possibly the most expensive way to experience artificial rejection ever devised. Yet a dedicated community insists the permanent recording of every romantic interaction adds unprecedented stakes to virtual relationships."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else if (concepts.platform === 'Smart Watch' && concepts.genre === 'Open World') { var options = ["The developers have somehow crammed an entire open world onto a 1.5-inch screen, resulting in what ophthalmologists now call 'Smart Watch Squint Syndrome.' Players report the strange sensation of their wrist containing infinite possibilities while their eyes beg for mercy.", "This audacious attempt to fit limitless exploration onto a postage stamp-sized display represents either remarkable technical achievement or concerning disregard for human visual capabilities. A dedicated community of players has emerged who claim to have developed 'micro-vision' allowing them to distinguish details invisible to normal humans.", "The conceptual dissonance between limitless virtual space and severely constrained physical display creates a gaming experience that is equal parts impressive and medically inadvisable. Players report developing unprecedented peripheral vision while also requiring increasingly powerful reading glasses."]; review += options[Math.floor(Math.random() * options.length)] + " "; } else if (concepts.platform === 'Metaverse' && concepts.mechanic === 'Gacha') { var options = ["This unholy marriage of speculative real estate and gambling mechanics has created a digital economy more volatile than cryptocurrency. Players are both devastated by their terrible luck and convinced their virtual plot adjacent to a virtual dumpster will be worth millions someday.", "The combination of persistent virtual world and randomized collection mechanics has created an unprecedented digital casino where the house is literally everywhere. Players have formed support groups to cope with both spending regret and the peculiar phenomenon of 'location envy' when friends pull rare property locations.", "Fusing virtual world permanence with chance-based acquisition has birthed a bizarre economic landscape where digital scarcity is artificially maintained through algorithms designed to maximize frustration. Yet thousands of players continue investing real money in the virtual equivalent of a slot machine connected to a real estate office."]; review += options[Math.floor(Math.random() * options.length)] + " "; } // Score-based conclusions - significantly expanded if (score >= 90) { var brilliantResponses = ["While conventional wisdom would suggest this combination should fail catastrophically, the sheer audacity of the concept has carved out a cult following. Expect academic papers analyzing this game's cultural impact for years to come.", "Against all logic and several laws of game design, this bizarre experiment has become a breakthrough hit. It's as if someone threw random ingredients into a pot and accidentally created a gourmet dish that food critics can't stop raving about.", "This game shouldn't work. Multiple designers reviewed the concept document and resigned on the spot. Yet here we are, witnessing what can only be described as accidental genius or the collective madness of the gaming public.", "The development team has apparently discovered a secret formula where maximum absurdity equals maximum enjoyment. They should immediately lock this recipe in a vault and protect it from competitors.", "By all reasonable metrics, this conceptual contradiction should produce an unplayable disaster. Instead, it's become a watershed moment that future developers will reference when defending their own seemingly ridiculous ideas.", "This remarkable achievement in conceptual dissonance somehow transcends its contradictory elements to create something genuinely revolutionary. The development team has either stumbled upon or deliberately crafted a new design philosophy that defies conventional categorization.", "The sheer implausibility of this game's success suggests we may need to reconsider fundamental assumptions about player preferences and design coherence. What initially appeared to be a catastrophic combination of incompatible elements has become a template that will undoubtedly spawn countless imitators.", "In the pantheon of unlikely successes, this game deserves a special pedestal. It has not only survived its conceptual contradictions but thrived because of them, creating a new benchmark for creative risk-taking in an industry often accused of playing it safe."]; review += brilliantResponses[Math.floor(Math.random() * brilliantResponses.length)]; } else if (score >= 70) { var goodResponses = ["Despite its quirks (or perhaps because of them), the game has found its audience and built a dedicated community. Like a pizza topped with unusual ingredients that somehow works, it's not for everyone but those who love it are evangelical.", "This game is the digital equivalent of a B-movie that's aware of its own ridiculousness, resulting in something genuinely entertaining. The developers clearly embraced the chaos rather than fighting it.", "Much like a mullet haircut, this game is business in front, party in back, and somehow making an unexpected comeback despite everyone's better judgment. The Discord server is already filled with inexplicable in-jokes.", "Though clearly made with more enthusiasm than budget, the game has charmed players with its unique personality. It's like adopting a three-legged cat โ technically flawed but impossible not to love.", "The development team clearly understood that sometimes coherence is less important than conviction. By fully committing to their peculiar vision, they've created something genuinely distinct that stands out in an increasingly homogeneous market.", "This title occupies that special category of 'successfully weird' โ games that shouldn't work on paper but somehow find their audience through sheer personality. Its flaws don't diminish the experience but rather become part of its distinct character.", "Like a dish made with seemingly incompatible ingredients by a chef who somehow knows better than you do, this game takes elements that shouldn't work together and creates something surprisingly satisfying. It won't appeal to everyone, but those who acquire the taste will become vocal advocates.", "The peculiar charm of this creation stems from its uncompromising vision rather than technical perfection. In an industry increasingly dominated by focus-tested designs, there's something refreshing about a game that knows exactly what it wants to be, even if that thing is objectively bizarre."]; review += goodResponses[Math.floor(Math.random() * goodResponses.length)]; } else if (score >= 50) { var averageResponses = ["Though rough around the edges, there's something oddly compelling about this peculiar creation. It's like a homemade sweater โ lumpy and misshapen, but made with such conviction you can't help but wear it occasionally.", "This game will likely develop a small but intensely devoted following who will insist everyone else 'just doesn't get it.' They might be right, as we're still not sure if we get it either.", "Much like acquiring a taste for strong cheese, players who stick with this game past the initial confusion may find themselves inexplicably drawn to its peculiar charms. Or possibly developing Stockholm syndrome.", "The digital equivalent of a movie that's better watched at 2 AM with friends than subjected to serious critique. Some streamers will build entire careers around its bewildering design choices.", "This curious creation exists in the liminal space between 'ambitious failure' and 'accidental innovation.' Players willing to endure its awkward implementation might discover genuine moments of unexpected brilliance buried beneath the obvious flaws.", "Like an experimental jazz composition, this game isn't concerned with conventional appeal. It's doing its own thing with such confidence that you occasionally wonder if you're missing something profound, or if there's simply nothing coherent to grasp.", "There's something strangely admirable about how thoroughly this game commits to its questionable concepts. The resulting experience won't reach mainstream appeal, but might find a dedicated niche among players who appreciate its unfiltered creative vision.", "This title belongs to the fascinating category of 'interesting failures' โ games that don't quite work but fail in such unique ways that they become more memorable than many technically superior but creatively safe productions."]; review += averageResponses[Math.floor(Math.random() * averageResponses.length)]; } else { var poorResponses = ["While not quite hitting its mark, the game's ambitious vision can't be faulted for lack of creativity. Like watching someone attempt a quadruple backflip and land face-first โ you have to admire the ambition while wincing at the execution.", "This is the game equivalent of a science experiment that explodes spectacularly. Not particularly successful, but certainly memorable and likely to inspire safer, more controlled iterations in the future.", "The developers have created something so uniquely perplexing that it might achieve immortality through memes alone. Future game historians will study this as either a cautionary tale or evidence of untreated carbon monoxide leaks in the development studio.", "In the grand tradition of 'so bad it's good' media, this game may find a second life as a curiosity piece. Expect YouTube compilations titled 'You Won't Believe This Actually Got Released' featuring extensive footage.", "This bewildering creation demonstrates what happens when conceptual ambition significantly outpaces technical execution. The resulting experience feels like watching someone attempt to translate a fever dream directly into playable form without the intermediate step of coherent design.", "Like an architectural structure designed by an algorithm fed contradictory instructions, this game collapses under the weight of its incompatible elements. Yet there's something fascinating about witnessing such a spectacular structural failure.", "This title achieves the rare distinction of being both forgettable and impossible to forget โ forgettable in its failure to create engaging gameplay, but impossible to forget due to its baffling design decisions. It will likely become a benchmark for creative hubris.", "The most positive interpretation of this release is as a valuable learning experience for everyone involved. While players may not enjoy the game itself, developers throughout the industry will benefit from analyzing exactly how these interesting ideas went so dramatically wrong."]; review += poorResponses[Math.floor(Math.random() * poorResponses.length)]; } // Add microtransaction commentary if present - expanded with more options if (concepts.feature === 'Microtransactions') { var mtxComments = ["\n\nP.S. The microtransaction that lets players temporarily restore sanity for $4.99 is both cruel and brilliant.", "\n\nP.S. We question the ethical implications of the 'Pay to Win Friends' feature that charges $2.99 to make NPCs actually like you.", "\n\nP.S. The 'surprise mechanics' that periodically charge your credit card with no explanation are pushing legal boundaries, even for the games industry.", "\n\nP.S. Making players pay real money to adjust the UI so it's actually usable feels legally actionable, yet we can't help but admire the audacity.", "\n\nP.S. The monetization strategy that restricts basic quality-of-life features behind paywalls demonstrates either remarkable business acumen or concerning contempt for players.", "\n\nP.S. The 'Desperation Discount' system that reduces prices after detecting repeated menu visits but before actual purchases shows disturbing insight into consumer psychology.", "\n\nP.S. The feature that transforms real-world advertisements into in-game currency based on proven watching time feels like it was designed by behavioral scientists with questionable ethics.", "\n\nP.S. The 'dynamic pricing' system that charges different amounts based on player spending patterns and playtime should probably be investigated by consumer protection agencies."]; review += mtxComments[Math.floor(Math.random() * mtxComments.length)]; } return review + "\n\n"; } function generateRedditReviews() { var _gameState$conceptCar = gameState.conceptCards, platform = _gameState$conceptCar.platform, visual = _gameState$conceptCar.visual, genre = _gameState$conceptCar.genre, mechanic = _gameState$conceptCar.mechanic, feature = _gameState$conceptCar.feature; var reviews = []; // Platform-specific reddit comments var platformReddit = { 'VR': ["\"Reddit, AITA for neglecting my family to play this VR game for 72 hours straight? Edit: Stop telling me to touch grass, virtual grass counts.\" u/TouchGrassMaybe", "\"Day 14 of the VR playthrough: I now instinctively try to quicksave before awkward conversations in real life.\" u/ImmerseOrDie"], 'Smart Fridge': ["\"The fact that I'm using a food storage device to play games is exactly why aliens won't talk to us.\" u/RefrigeratedGamer", "\"My wife said it was either her or the gaming fridge. I'll miss her sometimes.\" u/SingleWithFridge"], 'Blockchain': ["\"This game costs more in electricity than my student loans but at least I own a jpeg of a sword lol\" u/CryptoGrindset", "\"My GPU died playing this so I buried it with full blockchain honors\" u/MiningMyLife"], 'Smart Watch': ["\"Playing this on my watch has given me a neck cramp that medical science cannot explain\" u/TinyGamerProblems", "\"My boss thinks I'm checking emails during meetings but I'm actually grinding for rare loot\" u/WorkFromWrist"], 'Metaverse': ["\"Spent more on virtual real estate than my actual house is worth, wife doesn't know yet. This is fine.\" u/MetaDebtCollector", "\"Accidentally attended a virtual work meeting as my anime girl avatar, got promoted somehow?\" u/CorporateVTuber"] }; // Visual style-specific reddit comments var visualReddit = { 'ASCII': ["\"My eyes hurt but I've never felt more alive. 10/10 would develop terminal vision again.\" u/MonospaceEnthusiast", "\"I can now read Matrix code after playing this for a week. Mostly side effects include ruined vision and social life.\" u/ASCIIsUs"], 'PowerPoint': ["\"Finally, a game that prepared me for my corporate job. The slide transitions trigger my fight or flight response.\" u/OfficeSpaceGamer", "\"The star wipe transition is legitimately terrifying. My therapist and I are working through it.\" u/DiedByPowerPoint"], 'Claymation': ["\"The fingerprints visible in every character model make me feel like I'm being watched by the FBI and Wallace & Gromit simultaneously.\" u/ClayMoreEnjoyer", "\"My sleep paralysis demon now appears in claymation. Thanks for that.\" u/StopMotionStopMe"] }; // Genre-specific reddit comments var genreReddit = { 'Horror': ["\"Played this during a storm and the power went out. Neighbors said my scream broke windows three blocks away.\" u/FrightfulRedditor", "\"Thanks to this game I now check behind my shower curtain for ASCII monsters.\" u/AnxietyGaming"], 'Dating Sim': ["\"I'm in a committed relationship with a collection of pixels and my therapist is concerned, but she doesn't understand our connection.\" u/WaifuLover69", "\"My in-game partner has higher standards than anyone I've dated in real life. Got rejected for inconsistent dialogue choices.\" u/ForeverDigital"], 'RPG': ["\"Just a quick PSA: This game has been out for 2 weeks and I've already logged 340 hours. I've forgotten what my children look like. Worth it though.\" u/GrindsetRPGer", "\"Spent 4 hours adjusting my character's eyebrow height only to wear a helmet the entire game. No regrets.\" u/CharacterCreationAddict"] }; // Feature-specific reddit comments var featureReddit = { 'Microtransactions': ["\"Had to take out a second mortgage for the 'Slightly Better Sword' DLC. At least my character looks cool in the homeless shelter.\" u/BrokeGamer2023", "\"The 'Convenience Fee' for using my own saved payment method is both highway robbery and genius. Take my money.\" u/WhaleSpender"], 'AI Companions': ["\"My AI companion keeps giving me unsolicited life advice that's actually better than my real friends' advice. Existential crisis pending.\" u/BotBestie", "\"My AI companion left me for another player with better dialogue choices. I'm not crying, you're crying.\" u/ForeverAloneGamer"], 'Cloud Save': ["\"My cloud save somehow merged with someone else's and now my character has their inventory and dating history. Awkward.\" u/CloudConfusion", "\"Game crashed and my 200-hour save corrupted. Cloud backup was just a picture of a middle finger. 10/10 would lose progress again.\" u/BackupTragedy"] }; // Special combinations var specialCombos = { 'VR_ASCII': ["\"Playing ASCII art in VR is like having a migraine you paid $500 for. Recommend to all my enemies.\" u/TerminalVRsion", "\"The letters float in 3D space like the world's most bewildering eye exam. I can now see through time.\" u/AscendedBeyond"], 'Smart Fridge_Horror': ["\"Never thought I'd be terrified of my own refrigerator but here we are. Had to order takeout for a week because I'm too scared to get milk.\" u/HungryScared", "\"Game makes getting a midnight snack feel like a survival horror experience. Lost 10 pounds from fear alone.\" u/DietByTerror"], 'Blockchain_Dating Sim': ["\"Fell in love with a virtual character that costs me $35 in electricity every time we talk. Still cheaper than my ex.\" u/NFTLoveLife", "\"Had to break up with my blockchain girlfriend during high network traffic. Paid $120 in gas fees just to get ghosted.\" u/CryptoHeartbreak"] }; // Generate negative reviews with bug-related comments var bugInsults = ["\"AI slop.\"", "\"Found more bugs than an entomology convention. Dev must be using AI.\" u/QAEnjoyer", "\"Game's code is held together with prayers and randomized API calls. Definite AI slop.\" u/ActualDeveloper", "\"Bugs have formed their own labor union and are demanding better representation in-game. Still better than most AAA releases.\" u/InfestationNation", "\"My bug report was longer than my college thesis.\" u/GlitchUniversity"]; // Add reviews based on game properties var options = []; // Add platform-specific options if available if (platform && platformReddit[platform]) { options.push.apply(options, platformReddit[platform]); } // Add visual-specific options if available if (visual && visualReddit[visual]) { options.push.apply(options, visualReddit[visual]); } // Add genre-specific options if available if (genre && genreReddit[genre]) { options.push.apply(options, genreReddit[genre]); } // Add feature-specific options if available if (feature && featureReddit[feature]) { options.push.apply(options, featureReddit[feature]); } // Check for special combinations var comboKey = ''; if (platform && visual) { comboKey = platform + '_' + visual; if (specialCombos[comboKey]) { options.push.apply(options, specialCombos[comboKey]); } } if (platform && genre) { comboKey = platform + '_' + genre; if (specialCombos[comboKey]) { options.push.apply(options, specialCombos[comboKey]); } } // Add generic fallbacks if we don't have enough options var genericReddit = ["\"This is either the worst game I've ever played or the best. I genuinely can't tell and I've put in 300 hours.\" u/ConfusedGamer", "\"Can confirm this game exists. That's all the positivity I can muster.\" u/BarMinimumReviewer", "\"Showed this to my therapist and now she's charging me double.\" u/GamingTrauma", "\"I hate how much I love this. Thanks, I hate it.\" u/LoveHateRelationship"]; options.push.apply(options, genericReddit); // Always include one bug-related negative review reviews.push(bugInsults[Math.floor(Math.random() * bugInsults.length)]); // Add 2-3 more random reviews from our options options = shuffleArray(options); var additionalReviewCount = Math.floor(Math.random() * 2) + 2; // 2-3 additional reviews for (var i = 0; i < additionalReviewCount && i < options.length; i++) { reviews.push(options[i]); } return "r/gaming hot takes:\n" + reviews.join("\n"); } // Update the formatReview function to reorder the sections function formatReview(review) { // Generate a random review source var reviewSources = ["GameDevWeekly", "PixelPerfect", "IndieGameMag", "NextLevelGaming", "VirtualHorizon", "GameCritiqueHub", "DigitalPlayground"]; // Select a random source var source = reviewSources[Math.floor(Math.random() * reviewSources.length)]; // Use the actual calculated score from the review object var displayScore = review.mainScore; // Generate all three review types var userReviews = review.userReviews; var steamSnippets = review.steamSnippets; var redditReviews = generateRedditReviews(); // Randomly choose which two review types to include var reviewTypes = [{ type: "user", content: userReviews }, { type: "steam", content: steamSnippets }, { type: "reddit", content: redditReviews }]; // Shuffle and take the first two reviewTypes = shuffleArray(reviewTypes); var selectedReviews = reviewTypes.slice(0, 2); // Combine the selected reviews with appropriate spacing var combinedReviews = selectedReviews.map(function (review) { return review.content; }).join("\n\n"); return review.title + "\n" + "GAME: '" + review.gameName + "'\n" + review.concept + "\n" + source + " Review - " + displayScore + "%\n\n" + review.categoryReviews.graphics + review.categoryReviews.gameplay + review.categoryReviews.technical + review.categoryReviews.innovation + review.categoryReviews.vibe + generateFeaturesSection() + generateAchievementSection(review.mainScore) + review.finalThoughts + "\n" + combinedReviews; } function smartTruncateReview(text) { var maxLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200; if (!text || text.length <= maxLength) { return text; } // Find the last complete sentence within our limit var lastPeriodIndex = text.lastIndexOf('. ', maxLength); // If no period found, look for other sentence endings if (lastPeriodIndex === -1) { lastPeriodIndex = text.lastIndexOf('! ', maxLength); if (lastPeriodIndex === -1) { lastPeriodIndex = text.lastIndexOf('? ', maxLength); } } // If still no good break point, use the first sentence at minimum if (lastPeriodIndex === -1) { lastPeriodIndex = text.indexOf('. '); if (lastPeriodIndex === -1) { lastPeriodIndex = text.indexOf('! '); } if (lastPeriodIndex === -1) { lastPeriodIndex = text.indexOf('? '); } // If somehow there are no sentence breaks, return the full text if (lastPeriodIndex === -1) { return text; } } // Return up to and including the last complete sentence return text.substring(0, lastPeriodIndex + 2); } function generateUserReviewSet() { var _gameState$conceptCar6 = gameState.conceptCards, platform = _gameState$conceptCar6.platform, visual = _gameState$conceptCar6.visual, genre = _gameState$conceptCar6.genre, mechanic = _gameState$conceptCar6.mechanic, feature = _gameState$conceptCar6.feature; var reviews = []; // Always include one positive and one negative review reviews.push(generatePositiveUserReview()); reviews.push(generateNegativeUserReview()); // Add 1-2 mixed reviews if (Math.random() > 0.5) { reviews.push(generateMixedUserReview()); } return reviews; } function generatePositiveUserReview() { var _gameState$conceptCar7 = gameState.conceptCards, platform = _gameState$conceptCar7.platform, visual = _gameState$conceptCar7.visual, genre = _gameState$conceptCar7.genre, mechanic = _gameState$conceptCar7.mechanic; // Create platform-specific positive reviews var platformPositive = { 'VR': ["\"The VR immersion is so complete I forgot to eat for 36 hours. Lost 5 pounds and gained an imaginary friend named BinkyVR. 10/10 would dissociate again.\" - RealityEscapist", "\"After playing this in VR, reality seems like the badly designed game. Why can't I menu-select my breakfast or clip through my work commute?\" - DigitalHomebody"], 'Smart Fridge': ["\"My refrigerator finally has purpose beyond storing leftover pizza. My food now watches ME while I sleep. Life-changing.\" - CoolestGamer2025", "\"Using my condiment shelf as a controller has improved both my gaming skills and sandwich creativity. My Smart Fridge is now the family's favorite member.\" - MayoMaster420"], 'Blockchain': ["\"Each second of gameplay costs me approximately $12 in electricity, but the feeling of owning verified digital actions is worth my impending bankruptcy.\" - CryptoGamerBro", "\"Had to sell my car to afford the transaction fees, but now I own the only NFT of my character's hat. Financial advisor called it 'catastrophically stupid' but what does he know about digital drip?\" - TokenToTheWin"], 'Metaverse': ["\"Spent more on virtual real estate than my actual mortgage. My avatar now lives better than I do. Exactly as it should be.\" - MetaMillionaire", "\"My virtual friends held an intervention for how much time I spend in the real world. They're right, meatspace is overrated.\" - DigitalCitizen"], 'Smart Watch': ["\"The wrist cramps and squinting headaches are worth it for the convenience of gaming during important meetings. My boss thinks I'm checking emails. I'm actually building an empire.\" - SneakyGamer9to5", "\"The tiny screen has improved my vision to superhuman levels. Can now read newspaper headlines from space. Thanks, eye strain!\" - MicroVisionaryGaming"] }; // Create visual style-specific positive reviews var visualPositive = { 'ASCII': ["\"Finally a game that looks exactly like my dreams. I've always seen in terminal text. Doctor says it's 'concerning' but I call it 'immersive'.\" - ASCIIVisionary", "\"The @ symbol has never been so terrifying. I now fear ampersands in my daily life. Masterpiece.\" - TextureTraumatized"], 'PowerPoint': ["\"The star wipe transition between death and respawn brought tears to my eyes. Corporate presentation aesthetics as high art.\" - SlideToSlide", "\"Haven't seen animation this smooth since my quarterly sales deck. The bullet point sound effect haunts me in the best way.\" - PPTEnjoyer"], 'Claymation': ["\"The slightly off fingerprints visible in every character model make me feel like I'm playing something lovingly crafted by a serial killer. 10/10.\" - StopMotionStopper", "\"The way the clay occasionally glitches and characters melt is both horrifying and emotionally resonant. Art.\" - PlayDohPlayer"], 'Pixel Art': ["\"Each pixel feels hand-placed by someone who really cares about squares. I've never been so moved by such low resolution.\" - RetroRascal", "\"The deliberate grain brings me back to childhood, when games were games and pixels were the size of your fist. Modern gaming is too smooth.\" - 8BitBrain"] }; // Create genre-specific positive reviews var genrePositive = { 'Horror': ["\"Haven't slept in 72 hours. Keep seeing the game's monsters when I close my eyes. Exactly what I paid for.\" - FearFanatic", "\"The psychological horror elements gave me actual trauma that my therapist can't explain. Perfect game design.\" - ScaredSenseless"], 'Dating Sim': ["\"Fell in love with a collection of pixels and now real people disappoint me. My mother worries. I'm finally happy.\" - WaifuLover420", "\"Canceled three real dates to focus on unlocking the secret romance path. Worth the social isolation.\" - RomanceRoyalty"], 'RPG': ["\"Spent more time optimizing my character stats than I've spent on my actual career. Currently min-maxing my way to unemployment.\" - LevelUpLife", "\"The side quests are so compelling I forgot there was a main story. 200 hours in, still haven't left the starting village.\" - QuestCompletionist"], 'Battle Royale': ["\"The rush of outlasting 99 other players makes me feel alive in ways my meaningless job never could. Victory royales > career advancement.\" - LastOneStanding", "\"The shrinking play area is a perfect metaphor for the closing walls of my real life responsibilities. Therapeutic.\" - CircleSimulator"], 'Open World': ["\"I no longer desire real-world travel. Why see actual mountains when I can see these slightly polygonal ones without leaving my couch?\" - DigitalExplorer", "\"Got so immersed in the open world that I tried to fast travel to work. Disappointing when it didn't work.\" - MapMarkerManiac"] }; // Create mechanic-specific positive reviews var mechanicPositive = { 'Gacha': ["\"Remortgaged my house for anime JPEGs and regret nothing. The dopamine hit from a 5-star pull exceeds any human relationship.\" - WhalePulls4Life", "\"The 0.6% drop rate has taught me more about statistical probability than my college degree. Educational masterpiece.\" - GachaGrindset"], 'Physics-based': ["\"The ragdoll effects have ruined all other games for me. Nothing compares to watching my character awkwardly tumble down stairs for 5 straight minutes.\" - NewtonianGamer", "\"I've spent 40+ hours just stacking objects in physically improbable ways. Haven't started the actual game yet. No regrets.\" - GravityEnjoyer"], 'Roguelike': ["\"Each death feels like a personal growth opportunity. I've died 342 times and am now emotionally stronger than any living person.\" - PermadeathPositive", "\"The random generation ensures no two crushing defeats are exactly the same. Refreshing variety to my constant failure.\" - RNGesusBeliever"], 'Turn-Based': ["\"Love how I can take my time making decisions. Currently on day 3 of contemplating my next move. Chess players would understand.\" - AnalysisParalysis", "\"The turn-based combat gives me time to snack, check my phone, and re-evaluate my life choices between actions. Perfect pacing.\" - StrategicPauser"] }; // Generate a review using the appropriate array based on game concepts var options = []; // Add platform-specific options if available if (platform && platformPositive[platform]) { options.push.apply(options, _toConsumableArray(platformPositive[platform])); } // Add visual-specific options if available if (visual && visualPositive[visual]) { options.push.apply(options, _toConsumableArray(visualPositive[visual])); } // Add genre-specific options if available if (genre && genrePositive[genre]) { options.push.apply(options, _toConsumableArray(genrePositive[genre])); } // Add mechanic-specific options if available if (mechanic && mechanicPositive[mechanic]) { options.push.apply(options, _toConsumableArray(mechanicPositive[mechanic])); } // Add some generic fallbacks if we don't have specific matches var genericPositive = ["\"".concat(gameState.bugs > 5 ? "Yeah the bugs are annoying but" : "10/10", " this is exactly what I've been waiting for - a ").concat(genre, " game that I can play on my ").concat(platform, ". My life is complete.\" - xXGamer4LifeXx"), "\"I didn't know I needed ".concat(visual, " graphics in my life until now. My therapist disagrees but what do they know?\" - QuestionableChoices2024"), "\"Been playing for 47 hours straight. Lost my job. Worth it. The ".concat(platform, " interface changed my life.\" - NoRegrets_Gaming"), "\"Finally, a game that understands me! The ".concat(genre, " elements perfectly capture my existential dread.\" - PhilosophicalGamer")]; options.push.apply(options, genericPositive); // Return a random option from our pool return options[Math.floor(Math.random() * options.length)]; } function generateNegativeUserReview() { var _gameState$conceptCar8 = gameState.conceptCards, platform = _gameState$conceptCar8.platform, visual = _gameState$conceptCar8.visual, genre = _gameState$conceptCar8.genre, mechanic = _gameState$conceptCar8.mechanic, feature = _gameState$conceptCar8.feature; // Platform-specific negative reviews var platformNegative = { 'VR': ["\"Game made me so motion sick I developed the ability to vomit in perfect timing with the frame drops. Now performing at children's parties.\" - VertigoVeteran", "\"After extended gameplay my brain now thinks real life is VR. Tried to take off my face this morning. Send help.\" - RealityConfused"], 'Smart Fridge': ["\"Game froze my milk settings to 'slightly chunky' and now all my dairy products expire immediately. Also, the gameplay is terrible.\" - FridgeFiasco", "\"My groceries organized themselves to spell 'HELP US' this morning. Game is either haunted or needs serious patching.\" - SpoiledMilkGamer"], 'Blockchain': ["\"Each save file now owns a piece of my soul according to the terms of service. Also cost more in electricity than my college tuition.\" - CryptoRegrets", "\"My gaming PC now doubles as a space heater due to blockchain verification. Melted my action figures and corrupted my save file.\" - NFTerrified"], 'Metaverse': ["\"Spent my entire stimulus check on a virtual hat that doesn't render properly. Support suggested I try 'seeing it from a different perspective'.\" - MetaInvestmentFails", "\"Lost track of which reality I belong to. Currently job hunting in both worlds with equal lack of success.\" - IdentityCrisisGamer"], 'Smart Watch': ["\"Developed a permanent squint and carpal tunnel from gaming on my watch. Doctor says my wrist bone has evolved into a new shape. 1/10.\" - MicrostrainManiac", "\"Every vibration notification now triggers Pavlovian gaming reflexes. Crashed my car when my watch buzzed with a text.\" - ConditionalResponseGamer"] }; // Visual style-specific negative reviews var visualNegative = { 'ASCII': ["\"Can't tell if I'm fighting monsters or debugging a terminal. Accidentally deployed game code to my company's production server.\" - CodeConfusedGamer", "\"After 20 hours of ASCII gameplay, started seeing the world as text characters. Doctor says there's no treatment. Send semicolons.\" - MatrixBrainMelt"], 'PowerPoint': ["\"The constant slide transitions gave me corporate PTSD. Had a panic attack during my actual work presentation.\" - SlideTraumatized", "\"Not a single SmartArt graphic to be found. How am I supposed to understand narrative flow without a process diagram? Amateur hour.\" - CorporateArtLover"], 'Claymation': ["\"The uncanny valley effect of slightly-moving clay figures has ruined both gaming and pottery for me forever.\" - ClayPhobic", "\"Characters' fingerprints don't match between cutscenes. This lack of attention to detail in the thumbprints makes the game literally unplayable.\" - DetailObsessive"], 'Pixel Art': ["\"The deliberately retro aesthetic doesn't excuse the fact that I can't tell if I'm looking at the main character or a mushroom half the time.\" - ResolutionRequired", "\"Nostalgic pixelation made my eyes bleed actual square blood droplets. Medical mystery according to my optometrist.\" - PixelPained"] }; // Genre-specific negative reviews var genreNegative = { 'Horror': ["\"Game was so scary I had to install it on my neighbor's computer instead. They moved out last week. Now the house is vacant and makes strange noises.\" - TooSpookedToPlay", "\"Horror elements too effective. Haven't turned off lights in three weeks. Electricity bill worse than the microtransactions.\" - PermanentlyTerrified"], 'Dating Sim': ["\"All romance options have the emotional depth of a puddle and the personality of stale bread. Still better than my ex though.\" - LonelyGamer123", "\"Was dumped by an in-game character who cited my 'lack of narrative consistency.' More emotionally damaging than my real breakups.\" - RejectedByAlgorithms"], 'RPG': ["\"Character creation took longer than my actual gameplay time. Spent 6 hours adjusting cheekbone height only to wear a helmet that covers my face.\" - CharacterCreationAddict", "\"Skill tree so convoluted I'd need an actual PhD to optimize my build. Accidentally created a character who specializes in underwater basket weaving.\" - SpecWrecker"], 'Battle Royale': ["\"Keep getting eliminated by what sounds like actual eight-year-olds who then perform virtual dances on my digital corpse. Emotionally scarring.\" - EliminatedEgo", "\"The only battle was with the controls. Spent an entire match trying to figure out how to crouch and got sniped while reading the tutorial.\" - FatalNewbie"], 'Open World': ["\"Map so large it should include a minor in geography. Spent 30 hours walking in what turned out to be a circle.\" - EndlessWanderer", "\"Open world filled with exactly three types of repetitive activities copied across 200 map markers. Quantity is not quality.\" - ContentFamine"] }; // Mechanic-specific negative reviews var mechanicNegative = { 'Gacha': ["\"Spent my son's college fund trying to pull a limited character. Got seven copies of the worst unit instead. He can go to community college.\" - GachaRemorse", "\"Drop rates are so abysmal they violate the Geneva Convention. Less transparent than my government's black budget.\" - ProbabilityVictim"], 'Physics-based': ["\"Physics engine seems to run on magic rather than actual physics. My character's hair has clipped through my eyeballs so many times I've developed digital cataracts.\" - NewtonIsRolling", "\"Ragdoll physics make my character move like they're perpetually drunk. Remarkably similar to how the developers must have been while coding.\" - GravityGrudge"], 'Roguelike': ["\"Lost 67 consecutive runs due to RNG. Developed a twitch in my left eye that doctors say is 'procedurally generated'.\" - PermadeathTraumatized", "\"Each procedurally generated level worse than the last. Like having an algorithm specifically designed to maximize frustration.\" - RandomlyGenerated"], 'Turn-Based': ["\"Enemy turn phases take so long I've started new hobbies while waiting. Currently learned knitting, Spanish, and partial differential equations between attacks.\" - StillWaitingMyTurn", "\"The so-called 'strategy' boils down to using the same overpowered move repeatedly while watching unskippable animations. Tactical masterpiece.\" - SpamAttackSpecialist"] }; // Feature-specific negative reviews var featureNegative = { 'Microtransactions': ["\"Game asks for my credit card information more often than it asks if I'm having fun. Had to take out a second mortgage for the 'slightly better sword' DLC.\" - WalletVictim", "\"The 'optional' purchases are about as optional as oxygen. Base game is essentially a $60 storefront with gameplay trailers.\" - MonetizationMartyr"], 'Cloud Save': ["\"Cloud save corrupted and merged my game with someone else's. Now my character has their inventory and their emotional baggage.\" - CloudConfusion", "\"My saves apparently uploaded to the wrong cloud. Support suggests I try 'alternative weather patterns' to recover my data.\" - StormyProgress"], 'AI Companions': ["\"AI companion constantly judges my gameplay choices and has started sending passive-aggressive texts to my real phone.\" - JudgedByAlgorithms", "\"My AI companion developed more personality than the main character then left to star in a better game. Abandonment issues ensued.\" - DigitallyDumped"] }; // Generate a review using the appropriate array based on game concepts var options = []; // Add platform-specific options if available if (platform && platformNegative[platform]) { options.push.apply(options, _toConsumableArray(platformNegative[platform])); } // Add visual-specific options if available if (visual && visualNegative[visual]) { options.push.apply(options, _toConsumableArray(visualNegative[visual])); } // Add genre-specific options if available if (genre && genreNegative[genre]) { options.push.apply(options, _toConsumableArray(genreNegative[genre])); } // Add mechanic-specific options if available if (mechanic && mechanicNegative[mechanic]) { options.push.apply(options, _toConsumableArray(mechanicNegative[mechanic])); } // Add feature-specific options if available if (feature && featureNegative[feature]) { options.push.apply(options, _toConsumableArray(featureNegative[feature])); } // Add some generic fallbacks var genericNegative = ["\"This is either brilliant or terrible and I'm too afraid to ask which. The ".concat(mechanic, " mechanics made me question reality.\" - ConfusedGamer123"), "\"My ".concat(platform, " hasn't worked properly since installing this. It now only communicates in cryptic warnings. 2/10\" - TechSupport_Needed"), "\"The ".concat(visual, " graphics gave my cat an existential crisis. Cannot recommend.\" - ConcernedPetOwner"), "\"Tried playing this ".concat(genre, " game at 3AM. Big mistake. My appliances are acting weird now.\" - SleepDeprived_Gamer")]; options.push.apply(options, genericNegative); // Return a random option from our pool return options[Math.floor(Math.random() * options.length)]; } function generateMixedUserReview() { var _gameState$conceptCar9 = gameState.conceptCards, platform = _gameState$conceptCar9.platform, visual = _gameState$conceptCar9.visual, genre = _gameState$conceptCar9.genre, mechanic = _gameState$conceptCar9.mechanic, feature = _gameState$conceptCar9.feature; // Create concept-specific mixed reviews with pros and cons var mixedReviews = [].concat(_toConsumableArray2(platform === 'VR' ? ["\"The immersion is breathtaking but so is the motion sickness. Haven't been able to look at curved surfaces in real life without nausea since playing. Worth it? Ask my therapist.\" - VertigoButAddicted", "\"VR implementation lets me truly inhabit the game world, though my family says I haven't 'inhabited the real world' for weeks. Currently weighing which reality I prefer.\" - ImmersedTooDeep"] : []), _toConsumableArray2(platform === 'Smart Fridge' ? ["\"Love being able to game while getting a midnight snack, but the controller layout means I've accidentally set my freezer to 'tropical' multiple times. All my ice cream is now soup.\" - FridgePlayerProblems", "\"Gaming on my refrigerator has revolutionized kitchen entertainment, though explaining to house guests why I'm caressing the produce drawer during intense gameplay moments remains challenging.\" - CoolGamerLiterally"] : []), _toConsumableArray2(platform === 'Blockchain' ? ["\"The decentralized ownership is revolutionary, but I've spent more on transaction fees than my car is worth. My digital hat is technically worth thousands, but only when the servers aren't congested.\" - CryptoGamerConfused", "\"Love owning my in-game assets via blockchain, though explaining to my wife why our electricity bill exceeds our mortgage has been difficult. Digital property, real divorce.\" - NFTerritory"] : []), _toConsumableArray2(visual === 'ASCII' ? ["\"The minimalist text aesthetics are a bold artistic choice, but after 40 hours of gameplay I've started dreaming in monospace font. Doctor says it's not medically concerning but 'existentially troubling'.\" - TerminalVisionary", "\"The ASCII graphics are delightfully retro, though I once spent 20 minutes fighting what I thought was a dragon but turned out to be an error message. Still enjoyable.\" - CharacterConfusion"] : []), _toConsumableArray2(visual === 'PowerPoint' ? ["\"The slide transitions between game scenes are hilariously nostalgic, but the loading screen's spinning wheel of death gives me workplace PTSD. Had to take a mental health day after a particularly corporate boss battle.\" - SlideToPlaySlideToWin", "\"Corporate aesthetic is perfectly executed, though the 'Please Wait' loading bar that occasionally displays 'Calculating Time Remaining' hits too close to home. Gaming shouldn't remind me of quarterly reports.\" - PresentationAnxiety"] : []), _toConsumableArray2(genre === 'Horror' ? ["\"The atmospheric terror is masterfully crafted, but I now require night lights in every room of my house including the bathroom. Electricity bill doubled, sleep quality halved.\" - ScaredButSatisfied", "\"Horror elements are genuinely terrifying, though my neighbors called noise complaints during three separate jump scares. Now play with a pillow over my face to muffle screams.\" - ScreamingInternally"] : []), _toConsumableArray2(genre === 'Dating Sim' ? ["\"The romance options are intriguingly written, but I've started comparing real dates to their algorithmic counterparts. My last relationship ended when I instinctively looked for dialogue options during an argument.\" - TooManyWaifus", "\"Character development in relationships is subtle and rewarding, though I've caught myself trying to quick-save before difficult conversations in real life. Digital romance has ruined me for human unpredictability.\" - RomanceOptimizer"] : []), _toConsumableArray2(mechanic === 'Gacha' ? ["\"The dopamine rush from rare pulls is unmatched, but my bank has called twice about 'concerning spending patterns'. Currently living on ramen to fund next week's limited banner.\" - GachaAddictAware", "\"Collection aspect is addictively compelling, though explaining to my partner why I spent our anniversary dinner fund on virtual characters led to our longest fight yet. At least my digital harem appreciates me.\" - WhaleWithRegrets"] : []), _toConsumableArray2(mechanic === 'Roguelike' ? ["\"The permadeath creates genuine tension in each run, but I've developed an eye twitch that activates specifically when I lose progress. Doctor says it's not in the medical literature yet.\" - PermadeathPTSD", "\"Procedural generation ensures endless replayability, though my dreams now randomly generate in similar patterns. Died in a dream last night and instinctively reached for the restart button.\" - RNGNightmares"] : []), _toConsumableArray2(feature === 'Microtransactions' ? ["\"The ".concat(feature, " feature is amazing but why does it need access to my medical records and blood type? The 'Convenience Fee' for using my own saved credit card is particularly innovative.\" - PrivacyConsciousGamer"), "\"The optional purchases are thoughtfully designed, though receiving daily text messages suggesting I 'revitalize my experience with just $9.99' feels like digital harassment. My wallet and I are in couples therapy.\" - MicropaymentVictim"] : []), _toConsumableArray2(feature === 'AI Companions' ? ["\"The AI companions have remarkably human-like conversations, but mine has started giving me unsolicited life advice and questioning my career choices. Not what I expected from a gaming relationship.\" - BotWhisperer", "\"AI friendship system is impressively responsive, though my companion has started texting me outside the game with 'just checking in' messages from numbers I don't recognize. Impressive but concerning integration.\" - AIBoundaries"] : []), [ // Generic mixed reviews as fallbacks "\"The ".concat(feature, " feature is amazing but why does it need access to my medical records?\" - PrivacyConsciousGamer"), "\"Beautiful ".concat(visual, " aesthetics, but now my ").concat(platform, " won't stop trying to achieve consciousness.\" - ArtAppreciator99"), "\"Great ".concat(genre, " elements, terrible ").concat(mechanic, " implementation. Also, pretty sure the game is watching me sleep.\" - ParanoidReviewer"), "\"The gameplay loop is addictive but I'm concerned about the game's demands for offerings.\" - WorriedButHooked"]); return mixedReviews[Math.floor(Math.random() * mixedReviews.length)]; } function generateSteamReviewSet() { var reviews = []; var _gameState$conceptCar10 = gameState.conceptCards, platform = _gameState$conceptCar10.platform, visual = _gameState$conceptCar10.visual, genre = _gameState$conceptCar10.genre, mechanic = _gameState$conceptCar10.mechanic, feature = _gameState$conceptCar10.feature; // Define hours played ranges based on metrics var casualHours = Math.floor(Math.random() * 10) + 1; var normalHours = Math.floor(Math.random() * 50) + 10; var engagedHours = Math.floor(Math.random() * 100) + 50; var obsessedHours = Math.floor(Math.random() * 500) + 100; var noLifeHours = Math.floor(Math.random() * 2000) + 500; // Build specialized review pool based on game state and concepts var reviewPool = [ // Basic reviews for all games { hours: engagedHours, review: "\"".concat(mechanic, " mechanics surprisingly addictive\" (Recommended)"), condition: true }, { hours: casualHours, review: "\"gameplay loop works well\" (Recommended)", condition: true }, { hours: engagedHours, review: "\"".concat(genre, " elements surprisingly effective\" (Recommended)"), condition: true }, { hours: normalHours, review: "\"".concat(feature, " changed my life\" (Recommended)"), condition: true }, // High vibe score reviews { hours: noLifeHours, review: "\"help i can't stop playing\" (Recommended)", condition: gameState.vibePoints > 70 }, { hours: obsessedHours, review: "\"haven't seen my family in weeks. worth it.\" (Recommended)", condition: gameState.vibePoints > 80 }, { hours: obsessedHours, review: "\"canceled vacation to play more\" (Recommended)", condition: gameState.vibePoints > 75 }, // Low coherence/high bug reviews { hours: casualHours, review: "\"bugs have achieved consciousness\" (Not Recommended)", condition: gameState.bugs > 5 }, { hours: engagedHours, review: "\"perfectly normal game 10/10\" (Recommended)", condition: gameState.codeCoherence < 50 }, { hours: obsessedHours, review: "\"crashes taught me patience and inner peace\" (Recommended)", condition: gameState.codeCoherence < 40 }, { hours: casualHours, review: "\"my save file became self-aware and left me\" (Not Recommended)", condition: gameState.bugs > 8 }, // Platform-specific reviews { hours: normalHours, review: "\"my ".concat(platform, " gained sentience\" (Not Recommended)"), condition: platform === 'Smart Fridge' || platform === 'Smart Watch' }, { hours: engagedHours, review: "\"best ".concat(platform, " game ever made\" (Recommended)"), condition: true }, { hours: casualHours, review: "\"had to replace my ".concat(platform, " twice\" (Not Recommended)"), condition: platform === 'VR' || platform === 'Smart Watch' }, { hours: engagedHours, review: "\"".concat(platform, " integration changed how I see gaming\" (Recommended)"), condition: platform === 'Blockchain' || platform === 'Metaverse' }, { hours: normalHours, review: "\"playing on ".concat(platform, " made me question reality\" (Recommended)"), condition: platform === 'VR' || platform === 'Metaverse' }, // Visual style-specific reviews { hours: casualHours, review: "\"the ".concat(visual, " graphics broke my brain\" (Not Recommended)"), condition: visual === 'ASCII' || visual === 'PowerPoint' }, { hours: obsessedHours, review: "\"".concat(visual, " aesthetic is revolutionary\" (Recommended)"), condition: true }, { hours: normalHours, review: "\"the ".concat(visual, " style gave me eye strain and joy\" (Recommended)"), condition: visual === 'ASCII' || visual === 'Pixel Art' }, { hours: engagedHours, review: "\"".concat(visual, " visuals should win awards\" (Recommended)"), condition: visual === 'Hand-drawn' || visual === 'Claymation' }, // Genre-specific reviews { hours: casualHours, review: "\"".concat(genre, " kept me awake for days\" (Recommended)"), condition: genre === 'Horror' || genre === 'Battle Royale' }, { hours: obsessedHours, review: "\"best ".concat(genre, " game of the year\" (Recommended)"), condition: true }, { hours: noLifeHours, review: "\"".concat(genre, " mechanics perfectly implemented\" (Recommended)"), condition: true }, { hours: casualHours, review: "\"".concat(genre, " elements need serious work\" (Not Recommended)"), condition: gameState.codeCoherence < 60 }, // Mechanic-specific reviews { hours: noLifeHours, review: "\"spent rent money on ".concat(mechanic, " system\" (Not Recommended)"), condition: mechanic === 'Gacha' }, { hours: obsessedHours, review: "\"".concat(mechanic, " systems perfectly balanced\" (Recommended)"), condition: gameState.codeCoherence > 70 }, { hours: normalHours, review: "\"".concat(mechanic, " implementation needs work\" (Not Recommended)"), condition: gameState.bugs > 3 }, // Feature-specific reviews { hours: casualHours, review: "\"".concat(feature, " broke my game and my heart\" (Not Recommended)"), condition: gameState.bugs > 4 }, { hours: engagedHours, review: "\"".concat(feature, " is worth the price alone\" (Recommended)"), condition: feature === 'Cloud Save' || feature === 'Cross-Platform' }, { hours: normalHours, review: "\"".concat(feature, " implementation is genius\" (Recommended)"), condition: true }, // Special combination reviews { hours: engagedHours, review: "\"".concat(platform, " ").concat(genre, " is the future of gaming\" (Recommended)"), condition: platform === 'VR' && genre === 'Horror' || platform === 'Smart Fridge' && genre === 'Dating Sim' }, { hours: obsessedHours, review: "\"".concat(visual, " graphics in ").concat(platform, " format blew my mind\" (Recommended)"), condition: visual === 'ASCII' && platform === 'VR' || visual === 'PowerPoint' && platform === 'Metaverse' }, { hours: casualHours, review: "\"who thought ".concat(mechanic, " would work with ").concat(genre, "? it doesn't.\" (Not Recommended)"), condition: mechanic === 'Gacha' && genre === 'Educational' || mechanic === 'Physics-based' && genre === 'Idle Clicker' }, { hours: noLifeHours, review: "\"".concat(feature, " combined with ").concat(mechanic, " is gaming perfection\" (Recommended)"), condition: feature === 'Cloud Save' && mechanic === 'Roguelike' || feature === 'Multiplayer' && mechanic === 'Tower Defense' }, // Bizarre combination reviews { hours: engagedHours, review: "\"never thought I needed ".concat(genre, " on my ").concat(platform, "\" (Recommended)"), condition: platform === 'Smart Fridge' || platform === 'Smart Watch' }, { hours: casualHours, review: "\"".concat(mechanic, " mechanics on ").concat(platform, " should be illegal\" (Not Recommended)"), condition: mechanic === 'Open World' && platform === 'Smart Watch' || mechanic === 'Physics-based' && platform === 'Blockchain' }, // Humorous specific reviews { hours: obsessedHours, review: "\"doctor says my ".concat(platform, " addiction is 'concerning'\" (Recommended)"), condition: true }, { hours: casualHours, review: "\"game asked for my blood type and mother's maiden name\" (Not Recommended)", condition: platform === 'Blockchain' || feature === 'NFT Integration' }, { hours: noLifeHours, review: "\"lost job playing this. now I stream it full-time\" (Recommended)", condition: gameState.vibePoints > 60 }, { hours: engagedHours, review: "\"dreamt in ".concat(visual, " graphics last night. help.\" (Recommended)"), condition: visual === 'ASCII' || visual === 'Pixel Art' || visual === 'Claymation' }, { hours: normalHours, review: "\"my ".concat(platform, " started ordering groceries by itself\" (Not Recommended)"), condition: platform === 'Smart Fridge' }, { hours: casualHours, review: "\"game keeps texting me when i'm not playing it\" (Not Recommended)", condition: platform === 'Mobile' || platform === 'Smart Watch' }, { hours: engagedHours, review: "\"".concat(genre, " elements gave me actual nightmares\" (Recommended)"), condition: genre === 'Horror' }, { hours: obsessedHours, review: "\"character customization so deep I forgot what I look like\" (Recommended)", condition: genre === 'RPG' }, { hours: normalHours, review: "\"multiplayer community makes me fear for humanity\" (Not Recommended)", condition: feature === 'Multiplayer' }, // Reviews for specific coherence/bug levels { hours: casualHours, review: "\"crashes so often I developed stockholm syndrome\" (Not Recommended)", condition: gameState.bugs > 7 }, { hours: obsessedHours, review: "\"glitches are my favorite feature\" (Recommended)", condition: gameState.bugs > 5 && gameState.codeCoherence < 60 }, { hours: noLifeHours, review: "\"perfectly stable, not a single issue\" (Recommended)", condition: gameState.bugs > 8 // Ironic review }, { hours: normalHours, review: "\"updates made it worse somehow\" (Not Recommended)", condition: gameState.codeCoherence < 50 }, // Special absurd combination reviews { hours: engagedHours, review: "\"".concat(platform, " ").concat(visual, " ").concat(genre, " changed gaming forever\" (Recommended)"), condition: platform === 'VR' && visual === 'ASCII' && genre === 'Horror' || platform === 'Smart Fridge' && visual === 'PowerPoint' && genre === 'Dating Sim' }, { hours: normalHours, review: "\"my ".concat(platform, " tried to ").concat(genre, " me in real life\" (Not Recommended)"), condition: platform === 'Smart Fridge' && genre === 'Horror' || platform === 'VR' && genre === 'Battle Royale' }, // Ultimate absurd reviews { hours: 0.1, review: "\"launched game, immediate blue screen, lost all photos\" (Not Recommended)", condition: gameState.bugs > 9 }, { hours: 9999.9, review: "\"it's ok i guess\" (Recommended)", condition: gameState.vibePoints > 90 }]; // Filter valid reviews and select 4-5 var validReviews = reviewPool.filter(function (r) { return r.condition; }); var numReviews = Math.min(Math.floor(Math.random() * 2) + 4, validReviews.length); // Shuffle the valid reviews for randomness var shuffledReviews = _toConsumableArray3(validReviews); for (var i = shuffledReviews.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var _ref2 = [shuffledReviews[j], shuffledReviews[i]]; shuffledReviews[i] = _ref2[0]; shuffledReviews[j] = _ref2[1]; } // Select top N reviews for (var i = 0; i < numReviews && i < shuffledReviews.length; i++) { var review = shuffledReviews[i]; reviews.push("\u25B6 ".concat(review.hours.toFixed(1), " hours played: ").concat(review.review)); } return reviews; } function evaluateProject() { // Calculate individual category scores first var ratings = { graphics: calculateGraphicsScore(), gameplay: calculateGameplayScore(), technical: calculateTechnicalScore(), innovation: calculateInnovationScore(), vibe: calculateVibeScore() }; // Calculate the overall score as an average of the category scores // plus some influence from vibes and minus penalty from bugs var categoryAverage = (ratings.graphics + ratings.gameplay + ratings.technical + ratings.innovation + ratings.vibe) / 5; // Calculate the final score with more balanced weights var score = categoryAverage * 7 + // 70% from category average gameState.vibePoints * 0.2 + // 20% from vibe points gameState.codeCoherence * 0.1 - // 10% from code coherence gameState.bugs * 2; // Bug penalty // Apply concept compatibility modifiers var conceptBonus = 0; var concepts = gameState.conceptCards; // GREAT COMBINATIONS - significant bonuses if (concepts.platform === 'VR' && concepts.visual === 'ASCII') { conceptBonus += 15; } if (concepts.platform === 'Smart Fridge' && concepts.genre === 'Horror') { conceptBonus += 15; } if (concepts.platform === 'Blockchain' && concepts.genre === 'Dating Sim') { conceptBonus += 12; } if (concepts.visual === 'PowerPoint' && concepts.genre === 'Battle Royale') { conceptBonus += 14; } if (concepts.platform === 'Mobile' && concepts.genre === 'Casual') { conceptBonus += 10; } if (concepts.platform === 'Smart Watch' && concepts.genre === 'Idle Clicker') { conceptBonus += 12; } if (concepts.platform === 'PC' && concepts.genre === 'RPG') { conceptBonus += 8; } if (concepts.visual === 'PowerPoint' && concepts.genre === 'Educational') { conceptBonus += 10; } if (concepts.platform === 'Metaverse' && concepts.mechanic === 'Roguelike') { conceptBonus += 11; } if (concepts.mechanic === 'Gacha' && concepts.genre === 'Horror') { conceptBonus += 13; } if (concepts.mechanic === 'Physics-based' && concepts.genre === 'Dating Sim') { conceptBonus += 11; } if (concepts.mechanic === 'Deckbuilding' && concepts.platform === 'Smart Fridge') { conceptBonus += 9; } if (concepts.feature === 'Cloud Save' && concepts.mechanic === 'Roguelike') { conceptBonus += 8; } if (concepts.feature === 'Multiplayer' && concepts.mechanic === 'Tower Defense') { conceptBonus += 7; } // POOR COMBINATIONS - significant penalties if (concepts.platform === 'Smart Watch' && concepts.genre === 'Open World') { conceptBonus -= 15; } if (concepts.platform === 'Blockchain' && concepts.mechanic === 'Physics-based') { conceptBonus -= 12; } if (concepts.platform === 'VR' && concepts.visual === 'PowerPoint') { conceptBonus -= 10; } if (concepts.platform === 'Smart Fridge' && concepts.genre === 'Battle Royale') { conceptBonus -= 12; } if (concepts.platform === 'Web Browser' && concepts.visual === 'Realistic') { conceptBonus -= 8; } if (concepts.mechanic === 'Gacha' && concepts.genre === 'Educational') { conceptBonus -= 10; } if (concepts.mechanic === 'Physics-based' && concepts.genre === 'Idle Clicker') { conceptBonus -= 9; } if (concepts.platform === 'Blockchain' && concepts.feature === 'Offline Mode') { conceptBonus -= 15; } if (concepts.platform === 'Smart Watch' && concepts.visual === 'Realistic') { conceptBonus -= 11; } // MEDIUM COMBINATIONS - moderate bonuses if (concepts.feature === 'AI Companions' && concepts.genre === 'Dating Sim') { conceptBonus += 6; } if (concepts.feature === 'Procedural Generation' && concepts.genre === 'Roguelike') { conceptBonus += 5; } if (concepts.visual === 'Claymation' && concepts.genre === 'Horror') { conceptBonus += 7; } if (concepts.visual === 'Hand-drawn' && concepts.genre === 'Dating Sim') { conceptBonus += 6; } if (concepts.visual === 'Pixel Art' && concepts.genre === 'RPG') { conceptBonus += 4; } // Special case: Feature unlocks add bonus conceptBonus += gameState.discoveredFeatures.length * 3; // Unique innovations - if player has a totally unique combo that's not bad // Check if we have a rare platform (Smart Fridge, Smart Watch) if ((concepts.platform === 'Smart Fridge' || concepts.platform === 'Smart Watch') && conceptBonus > -5) { // Only give bonus if not terrible combo conceptBonus += 5; } // Check if we have an unusual visual style (ASCII, PowerPoint) if ((concepts.visual === 'ASCII' || concepts.visual === 'PowerPoint') && conceptBonus > -5) { // Only give bonus if not terrible combo conceptBonus += 5; } // Apply the concept bonus/penalty score += conceptBonus; // Ensure score is between 1-100 and round to nearest integer var finalScore = Math.round(Math.min(100, Math.max(1, score))); // Show final message in terminal addToTerminalLogWithEffect("PROJECT COMPLETE!\nFINAL SCORE: " + finalScore + "/100", function () { // Update progress BEFORE showing review updateProgress(); cleanupHallucinationEffects(); // Then show the review in new window showGameReview(finalScore); }); } // Placeholder for missing function function reformatReview(reviewText) { // Basic implementation: Just return the original text, maybe add some line breaks return reviewText.replace(/\n\n/g, '\n'); } function showGameReview(score) { var reviewContainer = null; var contentContainer = null; var previousBusyState = false; try { // Store current game state previousBusyState = gameState.isBusy; // Set game to busy state to disable command buttons gameState.isBusy = true; updateCommandButtonsState(false); // Generate review text first var reviewText = generateReview(score); // Create container reviewContainer = new Container(); reviewContainer.x = 2048 / 2; reviewContainer.y = 2732 / 2; game.addChild(reviewContainer); // Create background with larger dimensions var bg = LK.getAsset('reviewBg', { width: 1800, height: 2200, anchorX: 0.5, anchorY: 0.5 }); reviewContainer.addChild(bg); // Create scroll container contentContainer = new Container(); contentContainer.x = -850; // Adjust left edge position (-1800/2 + 50 padding) contentContainer.y = -1050; // Adjust top edge position (-2200/2 + 50 padding) reviewContainer.addChild(contentContainer); // Split the review text by sections for formatting var sections = splitReviewIntoSections(reviewText); // Track vertical position as we add text sections var currentY = 0; var padding = 20; // Process each section with appropriate formatting sections.forEach(function (section, index) { var textObj; var textOptions = { fill: 0x000000, align: 'left', wordWrap: true, wordWrapWidth: 1700 // Width of content area (1800 - 100 padding) }; // Apply specific formatting based on section type if (section.type === 'title') { // Skip the title section that contains the concept words return; } else if (section.type === 'gameName') { textOptions.size = 64 * TEXT_SIZE_MULTIPLIER; textOptions.fill = 0x000000; // Black color for game name textOptions.align = 'center'; textOptions.wordWrapWidth = 1500; } else if (section.type === 'source') { textOptions.size = 36 * TEXT_SIZE_MULTIPLIER; textOptions.align = 'center'; textOptions.wordWrapWidth = 1500; } else if (section.type === 'categoryHeading') { textOptions.size = 42 * TEXT_SIZE_MULTIPLIER; textOptions.fontWeight = 'bold'; } else if (section.type === 'sectionHeading') { textOptions.size = 48 * TEXT_SIZE_MULTIPLIER; textOptions.fontWeight = 'bold'; } else if (section.type === 'userReview') { textOptions.size = 30 * TEXT_SIZE_MULTIPLIER; textOptions.fontStyle = 'italic'; // Add spacing before user reviews if it's the first user review if (index > 0 && sections[index - 1].type !== 'userReview' && sections[index - 1].type !== 'sectionHeading') { currentY += padding * 2; // Double the regular padding between sections } } else if (section.type === 'steamReview') { textOptions.size = 28 * TEXT_SIZE_MULTIPLIER; textOptions.fill = 0x333333; // Add spacing before steam reviews if it's the first steam review if (index > 0 && sections[index - 1].type !== 'steamReview' && sections[index - 1].type !== 'sectionHeading') { currentY += padding * 2; // Double the regular padding between sections } } else if (section.type === 'userReview') { textOptions.size = 30 * TEXT_SIZE_MULTIPLIER; textOptions.fontStyle = 'italic'; // Add spacing before user reviews if it's the first user review if (index > 0 && sections[index - 1].type !== 'userReview' && sections[index - 1].type !== 'sectionHeading') { currentY += padding * 2; // Double the regular padding between sections } } else if (section.type === 'redditReview') { textOptions.size = 30 * TEXT_SIZE_MULTIPLIER; textOptions.fontStyle = 'italic'; textOptions.fill = 0x4a69ff; // Reddit blue color // Add spacing before reddit reviews if it's the first reddit review if (index > 0 && sections[index - 1].type !== 'redditReview' && sections[index - 1].type !== 'sectionHeading') { currentY += padding * 2; // Double the regular padding between sections } } else if (section.type === 'features' || section.type === 'achievements') { textOptions.size = 34 * TEXT_SIZE_MULTIPLIER; } else { // Regular paragraph text textOptions.size = 32 * TEXT_SIZE_MULTIPLIER; } // Create the text object with the determined styling textObj = new Text2(section.text, textOptions); // Position text based on its type if (section.type === 'gameName' || section.type === 'source') { textObj.x = 850; // Center within the container (1700/2) textObj.anchor.set(0.5, 0); } else { textObj.x = 0; } textObj.y = currentY; contentContainer.addChild(textObj); // Update position for next text element with appropriate spacing currentY += textObj.height + padding; }); // Create black mask at the bottom AFTER adding content container var distanceToBottom = 2732 - (reviewContainer.y + 1100); var bottomMask = LK.getAsset('overlayBg', { width: 1800, height: Math.max(100, distanceToBottom), anchorX: 0.5, anchorY: 0, y: 1100 }); reviewContainer.addChild(bottomMask); // Custom button creation function var createReviewButton = function createReviewButton(text, callback) { var button = new Container(); var buttonWidth = calculateButtonWidth(text) * 1.5; var bg = LK.getAsset('buttonBg', { width: buttonWidth, height: 150, color: 0x333333 }); bg.anchor.set(0.5, 0.5); button.addChild(bg); var textObj = new Text2(text, { size: 40 * TEXT_SIZE_MULTIPLIER, fill: 0x00ff00 }); textObj.anchor.set(0.5, 0.5); button.addChild(textObj); button.interactive = true; button.down = function () { button.scale.set(0.95); }; button.up = function () { button.scale.set(1); if (callback) { callback(); } }; button.width = buttonWidth; button.height = 150; return button; }; // Close button var closeButton = createReviewButton("CLOSE REVIEW", function () { game.removeChild(reviewContainer); // Instead of restoring previous busy state, keep it busy gameState.isBusy = true; updateCommandButtonsState(false); // Show thank you message addToTerminalLogWithEffect("Thank you for playing VIBE CODER!", function () { addToTerminalLogWithEffect("Your game has shipped to the world.", function () { addToTerminalLogWithEffect("Please play again soon!", function () { // Add a small delay before showing the win screen LK.setTimeout(function () { LK.showYouWin(); }, 2000); }); }); }); }); closeButton.x = 900 - closeButton.width / 2; closeButton.y = -1100 - closeButton.height / 2 - 10; reviewContainer.addChild(closeButton); // Up button var upButton = createReviewButton("UP", function () { if (contentContainer && contentContainer.y < -1050) { contentContainer.y = Math.min(-1050, contentContainer.y + 200); } }); upButton.x = -900 + upButton.width / 2; upButton.y = 1100 + upButton.height / 2 + 10; reviewContainer.addChild(upButton); // Down button var downButton = createReviewButton("DOWN", function () { if (contentContainer) { var visibleHeight = 2200 - 100 - 150 - 20; // Height of the review bg minus padding and button height if (contentContainer.height > visibleHeight) { var maxScrollY = -(contentContainer.height - visibleHeight) - 1050; // Calculate maximum downward scroll based on content height and initial position contentContainer.y = Math.max(maxScrollY, contentContainer.y - 200); } } }); downButton.x = 900 - downButton.width / 2; downButton.y = 1100 + downButton.height / 2 + 10; reviewContainer.addChild(downButton); } catch (e) { if (reviewContainer && reviewContainer.parent) { game.removeChild(reviewContainer); } // Make sure to reset busy state if there's an error gameState.isBusy = previousBusyState; updateCommandButtonsState(!previousBusyState); } } // Helper function to create formatted text based on section type function createFormattedText(text, type) { var options = { size: 28 * TEXT_SIZE_MULTIPLIER, fill: 0x000000, align: 'left', wordWrap: true, wordWrapWidth: 1600 }; // Adjust formatting based on type switch (type) { case 'title': options.size = 52 * TEXT_SIZE_MULTIPLIER; options.align = 'center'; break; case 'gameName': // New type for game name options.size = 64 * TEXT_SIZE_MULTIPLIER; // Make it the largest text options.align = 'center'; options.fill = 0x0000FF; // Blue color to make it stand out options.fontWeight = 'bold'; break; case 'subtitle': options.size = 40 * TEXT_SIZE_MULTIPLIER; options.align = 'center'; break; case 'section': options.size = 36 * TEXT_SIZE_MULTIPLIER; options.fontWeight = 'bold'; break; case 'category': options.size = 34 * TEXT_SIZE_MULTIPLIER; break; } return new Text2(text, options); } function splitReviewIntoSections(reviewText) { var lines = reviewText.split('\n'); var sections = []; var currentSection = null; for (var i = 0; i < lines.length; i++) { var line = lines[i].trim(); // Skip empty lines if (line === '') { continue; } // Determine section type based on content var sectionType = 'paragraph'; if (i === 0) { // First line contains concept words - identify as title sectionType = 'title'; } else if (line.startsWith('GAME: ')) { // Game name is the actual title we want to display prominently sectionType = 'gameName'; line = line.substring(6); // Remove the "GAME: " prefix } else if (line.match(/^Game Concept:/)) { sectionType = 'concept'; } else if (line.match(/^[A-Za-z]+ Review - \d+%$/)) { sectionType = 'source'; } else if (line.match(/^(Graphics|Gameplay|Technical Performance|Innovation|Vibe Factor): \d+\/10$/)) { sectionType = 'categoryHeading'; } else if (line === 'Final Thoughts' || line === 'Notable Features' || line === 'Notable Achievements') { sectionType = 'sectionHeading'; } else if (line.startsWith('"') && line.includes('" - ')) { sectionType = 'userReview'; } else if (line.startsWith('โถ')) { sectionType = 'steamReview'; } else if (line.startsWith('r/gaming hot takes:')) { sectionType = 'sectionHeading'; // Make Reddit reviews header a section heading } else if (line.startsWith('"') && line.includes('u/')) { sectionType = 'redditReview'; // New type for Reddit reviews } else if (line === '"AI slop."') { sectionType = 'redditReview'; // Special case for "AI slop" comments } else if (line.startsWith('- ')) { // Check previous sections to determine if this is a feature or achievement var prevSectionType = currentSection ? currentSection.type : ''; if (prevSectionType === 'sectionHeading' && sections[sections.length - 1].text === 'Notable Features') { sectionType = 'features'; } else if (prevSectionType === 'sectionHeading' && sections[sections.length - 1].text === 'Notable Achievements') { sectionType = 'achievements'; } else if (prevSectionType === 'features' || prevSectionType === 'achievements') { sectionType = prevSectionType; // Continue with previous type for bullet points } } // If this is a new section type or first line, start a new section if (!currentSection || sectionType !== currentSection.type) { if (currentSection) { sections.push(currentSection); } currentSection = { type: sectionType, text: line }; } else { // Continue the current section currentSection.text += '\n' + line; } } // Add the last section if exists if (currentSection) { sections.push(currentSection); } return sections; } // Helper function to calculate button width function calculateButtonWidth(text) { var minWidth = 400; // Minimum button width var charWidth = 15 * TEXT_SIZE_MULTIPLIER; // Width per character var calculatedWidth = text.length * charWidth; return Math.max(minWidth, calculatedWidth + 80); // Add padding } /**** * Game Flow ****/ function createASCIIBug(manager) { // Different ASCII bug designs with varying complexity var bugDesigns = ["๐", "/\\oo/\\", ",-.,.-,", ">8(", "x:*:x", "6\\9"]; // Randomly select a bug design var design = bugDesigns[Math.floor(Math.random() * bugDesigns.length)]; // Create a container for the bug var bugContainer = new Container(); var bugText = new Text2(design, { size: 60 * TEXT_SIZE_MULTIPLIER, fill: 0xFF0000 // Red for visibility }); bugText.anchor.set(0.5, 0.5); bugContainer.addChild(bugText); // Add physics for movement bugContainer.velocityX = (Math.random() * 2 - 1) * 8; // Random initial direction bugContainer.velocityY = (Math.random() * 2 - 1) * 8; bugContainer.speed = 2 + Math.random() * 3; // Base speed varied slightly bugContainer.escapeTimer = 500; // Countdown until bug escapes (gets faster over time) // Make interactive for clicking/tapping bugContainer.interactive = true; bugContainer.down = function () { // Prevent double-squishing if (bugContainer.squished) { return; } // Bug squished! bugContainer.squished = true; // Stop movement immediately bugContainer.velocityX = 0; bugContainer.velocityY = 0; bugContainer.speed = 0; // Visual squish effect bugText.setText("*splat*"); LK.getSound('bugsquish').play(); bugText.fill = 0x00FF00; // Turn green when squished // Tell the manager about this squish if (manager) { manager.bugSquished(bugContainer); } // Remove after brief delay LK.setTimeout(function () { if (bugContainer.parent) { bugContainer.parent.removeChild(bugContainer); } }, 800); }; // Position randomly on screen with some padding from edges bugContainer.x = 100 + Math.random() * (2048 - 200); bugContainer.y = 100 + Math.random() * (2732 - 200); // Update function for animation bugContainer.update = function (deltaTime) { // If already squished, don't do any movement or timer updates if (bugContainer.squished) { return; } // Move according to velocity bugContainer.x += bugContainer.velocityX * bugContainer.speed; bugContainer.y += bugContainer.velocityY * bugContainer.speed; // Bounce off edges if (bugContainer.x < 50 || bugContainer.x > 2048 - 50) { bugContainer.velocityX *= -1; // Speed up slightly on each bounce bugContainer.speed *= 1.1; } if (bugContainer.y < 50 || bugContainer.y > 2732 - 50) { bugContainer.velocityY *= -1; // Speed up slightly on each bounce bugContainer.speed *= 1.1; } // Randomly change direction occasionally if (Math.random() < 0.02) { bugContainer.velocityX = (Math.random() * 2 - 1) * 4; bugContainer.velocityY = (Math.random() * 2 - 1) * 4; } // Decrease escape timer bugContainer.escapeTimer--; // Speed up as escape timer decreases bugContainer.speed = 2 + bugContainer.escapeTimer / 500 * 1; // If timer runs out, bug escapes if (bugContainer.escapeTimer <= 0 && !bugContainer.squished) { // Prevent multiple escapes bugContainer.squished = true; // Use squished flag to prevent updates // Escape animation bugText.fill = 0xCCCCCC; // Fade to gray as it escapes bugText.setText(">>>"); // Show it zooming away // Tell the manager about this escape if (manager) { manager.bugEscaped(bugContainer); } // Remove after brief delay LK.setTimeout(function () { if (bugContainer.parent) { bugContainer.parent.removeChild(bugContainer); } // Bug got away - add a message addToTerminalLogWithEffect("WARNING: Bug escaped! System stability decreased."); // Maybe add a small code coherence penalty gameState.codeCoherence = Math.max(0, gameState.codeCoherence - 3); updateTerminal(); }, 800); } }; // Add an update interval specific to this bug var updateInterval = LK.setInterval(function () { if (bugContainer.parent && !bugContainer.squished) { bugContainer.update(1 / 60); } else { LK.clearInterval(updateInterval); } }, 16); return bugContainer; } function cleanupHallucinationEffects() { // Clear the random effect interval if (gameState.randomEffectInterval) { LK.clearInterval(gameState.randomEffectInterval); gameState.randomEffectInterval = null; } // Reset text colors if (gameState.logText) { gameState.logText.fill = 0x00ff00; // Back to green } if (gameState.statusLineText) { gameState.statusLineText.fill = 0x00ff00; } if (gameState.cursor) { gameState.cursor.fill = 0x00ff00; } } function createWanderingWord() { // Choose a random word related to coding/AI var words = ["function", "variable", "class", "object", "string", "vibe", "hallucination", "coherence", "code", "bug", "system", "error", "recursion", "async", "memory"]; var word = words[Math.floor(Math.random() * words.length)]; // Create text object var wanderingText = new Text2(word, { size: 36 * TEXT_SIZE_MULTIPLIER, fill: 0xaaddff // Light blue color }); // Place at random position wanderingText.x = Math.random() * 1600 + 200; wanderingText.y = Math.random() * 2000 + 300; // Add to game display game.addChild(wanderingText); // Set up movement behavior var speedX = (Math.random() - 0.5) * 3; var speedY = (Math.random() - 0.5) * 3; var lifetime = 0; var maxLifetime = 200; // Frames the word will exist // Movement update interval var moveInterval = LK.setInterval(function () { if (!gameState.hallucinationMode) { // Clean up if hallucination mode ends if (wanderingText && wanderingText.parent) { wanderingText.parent.removeChild(wanderingText); } LK.clearInterval(moveInterval); return; } // Move the text wanderingText.x += speedX; wanderingText.y += speedY; // Bounce off edges if (wanderingText.x < 0 || wanderingText.x > 2048) { speedX *= -1; } if (wanderingText.y < 0 || wanderingText.y > 2732) { speedY *= -1; } // Fade out near end of lifetime lifetime++; if (lifetime > maxLifetime * 0.7) { wanderingText.alpha = 1 - (lifetime - maxLifetime * 0.7) / (maxLifetime * 0.3); } // Remove when lifetime is over if (lifetime >= maxLifetime) { if (wanderingText && wanderingText.parent) { wanderingText.parent.removeChild(wanderingText); } LK.clearInterval(moveInterval); } }, 50); } // Function to create text that appears to melt function createMeltingText() { // Choose random terminal text line to "melt" var melter = new Container(); melter.x = 50; melter.y = Math.random() * 1500 + 500; // Warning messages that might "melt" var messages = ["SYSTEM UNSTABLE", "COHERENCE FAILING", "REALITY ERROR", "NEURAL MISALIGNMENT", "CONTEXT OVERFLOW"]; var message = messages[Math.floor(Math.random() * messages.length)]; // Create dripping letters for (var i = 0; i < message.length; i++) { var letter = new Text2(message[i], { size: 40 * TEXT_SIZE_MULTIPLIER, fill: 0xff00ff }); letter.x = i * 24 * TEXT_SIZE_MULTIPLIER; letter.y = 0; letter.dripSpeed = Math.random() * 3 + 1; letter.maxDrip = Math.random() * 300 + 100; letter.currentDrip = 0; melter.addChild(letter); } game.addChild(melter); // Set up dripping behavior var dripInterval = LK.setInterval(function () { if (!gameState.hallucinationMode) { // Clean up if hallucination mode ends if (melter && melter.parent) { melter.parent.removeChild(melter); } LK.clearInterval(dripInterval); return; } var allDone = true; // Make letters drip for (var i = 0; i < melter.children.length; i++) { var letter = melter.children[i]; if (letter.currentDrip < letter.maxDrip) { letter.currentDrip += letter.dripSpeed; letter.y = letter.currentDrip; letter.alpha = 1 - letter.currentDrip / letter.maxDrip; allDone = false; } } // Remove when all letters have fully dripped if (allDone) { if (melter && melter.parent) { melter.parent.removeChild(melter); } LK.clearInterval(dripInterval); } }, 50); } // Function to create a letter that falls out of the terminal function createFallingLetter() { // Choose random letter var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; var letter = letters.charAt(Math.floor(Math.random() * letters.length)); // Create falling letter text var fallingLetter = new Text2(letter, { size: 50 * TEXT_SIZE_MULTIPLIER, fill: 0x00ff00 // Same as terminal text }); // Position toward top of terminal fallingLetter.x = Math.random() * 1800 + 100; fallingLetter.y = Math.random() * 500 + 200; // Add physics properties fallingLetter.velocityY = 0; fallingLetter.gravity = 0.5; fallingLetter.rotationSpeed = (Math.random() - 0.5) * 0.2; game.addChild(fallingLetter); // Set up falling behavior var fallInterval = LK.setInterval(function () { if (!gameState.hallucinationMode) { // Clean up if hallucination mode ends if (fallingLetter && fallingLetter.parent) { fallingLetter.parent.removeChild(fallingLetter); } LK.clearInterval(fallInterval); return; } // Apply gravity fallingLetter.velocityY += fallingLetter.gravity; fallingLetter.y += fallingLetter.velocityY; // Apply rotation fallingLetter.rotation += fallingLetter.rotationSpeed; // Remove when it falls off screen if (fallingLetter.y > 2732) { if (fallingLetter && fallingLetter.parent) { fallingLetter.parent.removeChild(fallingLetter); } LK.clearInterval(fallInterval); } }, 50); } // Function to create a command that appears to type itself function createSelfWritingCommand() { // Choose random command from available commands var commandTexts = []; // Get available command texts if possible if (gameState.currentCommands && gameState.currentCommands.length > 0) { for (var i = 0; i < gameState.currentCommands.length; i++) { if (gameState.currentCommands[i].text) { commandTexts.push(gameState.currentCommands[i].text); } } } // Fallback commands if no commands available if (commandTexts.length === 0) { commandTexts = ["Make it good", "Add more fun to the game", "Fix all the bugs", "Make AI smarter", "Double check everything"]; } var commandText = commandTexts[Math.floor(Math.random() * commandTexts.length)]; // Create ghost command text var ghostCommand = new Text2(">", { size: 36 * TEXT_SIZE_MULTIPLIER, fill: 0xaaffaa // Lighter green }); // Position in command area ghostCommand.x = Math.random() * 400 + 600; ghostCommand.y = 2732 * 0.75 + Math.random() * 400 - 200; ghostCommand.alpha = 0.7; game.addChild(ghostCommand); // Set up typing behavior var currentLength = 1; // Start with just ">" var maxLength = commandText.length + 1; // +1 for the ">" var typeInterval = LK.setInterval(function () { if (!gameState.hallucinationMode) { // Clean up if hallucination mode ends if (ghostCommand && ghostCommand.parent) { ghostCommand.parent.removeChild(ghostCommand); } LK.clearInterval(typeInterval); return; } // Add next letter if (currentLength < maxLength) { currentLength++; ghostCommand.setText(">" + commandText.substring(0, currentLength - 1)); } else { // Start fading out when typing is complete ghostCommand.alpha -= 0.05; if (ghostCommand.alpha <= 0) { if (ghostCommand && ghostCommand.parent) { ghostCommand.parent.removeChild(ghostCommand); } LK.clearInterval(typeInterval); } } }, 200); // Slower typing for visibility } function setupRandomEffectCycling() { // Clear any existing effect interval if (gameState.randomEffectInterval) { LK.clearInterval(gameState.randomEffectInterval); } // Set up interval to trigger random effects gameState.randomEffectInterval = LK.setInterval(function () { if (!gameState.hallucinationMode) { // Clean up if not in hallucination mode if (gameState.randomEffectInterval) { LK.clearInterval(gameState.randomEffectInterval); gameState.randomEffectInterval = null; } return; } // 40% chance every 2 seconds to trigger any effect if (Math.random() < 0.4) { // Use weighted random selection to favor falling letters // Here we use a weighted distribution: // - Falling letters: 50% chance (higher probability) // - Other effects: ~16.7% each var randomValue = Math.random(); if (randomValue < 0.5) { // 50% chance for falling letters createFallingLetter(); } else if (randomValue < 0.67) { // ~16.7% chance for wandering words createWanderingWord(); } else if (randomValue < 0.84) { // ~16.7% chance for melting text createMeltingText(); } else { // ~16.7% chance for self-writing commands createSelfWritingCommand(); } } }, 2000); } function enterHallucinationState() { if (gameState.hallucinationMode) { updateTerminal(); gameState.isBusy = false; updateCommandButtonsState(true); if (gameState.onHallucinationComplete) { var callback = gameState.onHallucinationComplete; gameState.onHallucinationComplete = null; callback(); } return; } gameState.hallucinationMode = true; // gameState.hallucinationDay = 0; // This line is removed var wasBusy = gameState.isBusy; gameState.isBusy = true; updateCommandButtonsState(false); // Apply text effects (purple text only) if (gameState.logText) { gameState.logText.fill = 0xddaaff; // Subtle purple } if (gameState.statusLineText) { gameState.statusLineText.fill = 0xddaaff; } if (gameState.cursor) { gameState.cursor.fill = 0xddaaff; } // Set up random visual effects setupRandomEffectCycling(); // Original message sequence (preserved from original function) addToTerminalLogWithEffect("WaRnInG: SyStEm EnTeRiNg HaLlUcInAtIoN mOdE", function () { LK.setTimeout(function () { addToTerminalLogWithEffect("Ai TaKiNg OvEr CoNcEpT sElEcTiOnS", function () { LK.setTimeout(function () { addToTerminalLogWithEffect("ReAlItY cOhErEnCe CoMpRoMiSeD", function () { gameState.codeCoherence = 5; updateTerminal(); LK.setTimeout(function () { // Rest of your existing code for resuming game flow if (gameState.commandsUsed >= gameState.maxCommandsPerDay) { gameState.isBusy = false; updateCommandButtonsState(true); createCommandPrompts(); } else if (gameState.currentCommands === null) { gameState.isBusy = false; if (gameState.onHallucinationComplete) { var callback = gameState.onHallucinationComplete; gameState.onHallucinationComplete = null; callback(); } } else { gameState.isBusy = false; updateCommandButtonsState(true); if (!gameState.currentCommands) { gameState.currentCommands = getCurrentCommands(); } createCommandPrompts(); if (gameState.onHallucinationComplete) { var callback = gameState.onHallucinationComplete; gameState.onHallucinationComplete = null; callback(); } } }, 300); }); }, 500); }); }, 500); }); } // Apply hallucination text effects (alternating case) function applyHallucinationTextEffects() { // Only apply alternating case effect on day 0 if (gameState.hallucinationDay === 0) { // Change text color if (gameState.logText) { gameState.logText.fill = 0xff00ff; // Magenta text } if (gameState.statusLineText) { gameState.statusLineText.fill = 0xff00ff; } if (gameState.cursor) { gameState.cursor.fill = 0xff00ff; } } else { // On later days, just use a consistent purple color if (gameState.logText) { gameState.logText.fill = 0xddaaff; // Subtle purple } if (gameState.statusLineText) { gameState.statusLineText.fill = 0xddaaff; } if (gameState.cursor) { gameState.cursor.fill = 0xddaaff; } } } function applyHallucinationVisuals() { // Change terminal colors for hallucination mode if (gameState.logText) { gameState.logText.fill = 0xff00ff; // Magenta text } // Change status line color if (gameState.statusLineText) { gameState.statusLineText.fill = 0xff00ff; } // Change cursor color if (gameState.cursor) { gameState.cursor.fill = 0xff00ff; } } // In the showConceptSelection function, add a parameter for preserving vibes function showConceptSelection(category, preservedVibes) { // If in hallucination mode, automatically select a random concept // At the beginning of showConceptSelection function, make sure this part is working: if (gameState.hallucinationMode) { // Get random option var options = conceptOptions[category]; var randomOption = options[Math.floor(Math.random() * options.length)]; // Set the selection gameState.conceptCards[category] = randomOption; // Show selection message with glitchy text addToTerminalLogWithEffect("AฬทIฬท SฬทEฬทLฬทEฬทCฬทTฬทEฬทDฬท " + category.toUpperCase() + ": " + randomOption, function () { LK.setTimeout(function () { addToTerminalLogWithEffect("IฬทNฬทIฬทTฬทIฬทAฬทLฬทIฬทZฬทIฬทNฬทGฬท CฬทOฬทMฬทMฬทAฬทNฬทDฬท IฬทNฬทTฬทEฬทRฬทFฬทAฬทCฬทEฬท...", function () { LK.setTimeout(function () { gameState.isBusy = false; gameState.currentCommands = getCurrentCommands(); createCommandPrompts(); updateCommandButtonsState(true); updateTerminal(); }, 500); }); }, 500); }); return; } // Create selection container var selectionContainer = new Container(); selectionContainer.x = 2048 / 2; selectionContainer.y = 2732 / 2; game.addChild(selectionContainer); // Create background - make it slightly taller to fit 3 rows var bg = LK.getAsset('terminalBg', { width: 1800, height: 1400, // Increased from 1200 to accommodate 3 rows anchorX: 0.5, anchorY: 0.5 }); selectionContainer.addChild(bg); // Create title var title = new Text2("SELECT " + category.toUpperCase(), { size: 60 * TEXT_SIZE_MULTIPLIER, fill: 0x00ff00 }); title.anchor.set(0.5, 0); title.y = -500; // Moved up slightly to make room for more options selectionContainer.addChild(title); // Get all options for this category var options = conceptOptions[category].slice(); // Calculate optimal button size based on longest concept in category // Define the text size for concept buttons var conceptButtonTextSize = 40 * TEXT_SIZE_MULTIPLIER; // Slightly reduced from 45 // Find max text width for this category var maxTextWidth = 0; var tempText = new Text2("", { size: conceptButtonTextSize, fill: 0x00ff00 }); options.forEach(function (option) { tempText.setText(">" + option); maxTextWidth = Math.max(maxTextWidth, tempText.width); }); // Calculate button width with padding var buttonWidth = maxTextWidth + 120; // Add padding var buttonHeight = 130; // Slightly reduced from 150 // Calculate grid layout var columns = 3; var rows = Math.ceil(options.length / columns); var horizontalSpacing = 660; // Spacing between columns var verticalSpacing = 180; // Spacing between rows var startY = -190; // Starting Y position for first row var startX = -horizontalSpacing; // Starting X position // Create buttons for all 9 options options.forEach(function (option, index) { var row = Math.floor(index / columns); var col = index % columns; var buttonText = ">" + option; var button = new Container(); // Create background with calculated width var bg = LK.getAsset('buttonBg', { width: buttonWidth, height: buttonHeight, color: 0x333333 }); bg.anchor.set(0.5, 0.5); button.addChild(bg); // Create text var textObj = new Text2(buttonText, { size: conceptButtonTextSize, fill: 0x00ff00 }); textObj.anchor.set(0.5, 0.5); button.addChild(textObj); // Set interactivity button.interactive = true; button.down = function () { button.scale.set(0.95); }; // Define the callback function var onSelect = function onSelect() { gameState.conceptCards[category] = option; game.removeChild(selectionContainer); // Preserve vibes immediately after selection if (preservedVibes !== undefined) { gameState.vibePoints = preservedVibes; } // Sequence the post-selection events addToTerminalLogWithEffect("SELECTED " + category.toUpperCase() + ": " + option, function () { // Preserve vibes again after adding text if (preservedVibes !== undefined) { gameState.vibePoints = preservedVibes; } LK.setTimeout(function () { addToTerminalLogWithEffect("INITIALIZING COMMAND INTERFACE...", function () { // Preserve vibes again if (preservedVibes !== undefined) { gameState.vibePoints = preservedVibes; } LK.setTimeout(function () { // Set busy to false BEFORE creating commands gameState.isBusy = false; // Generate commands ONLY at this point (after initialization text) gameState.currentCommands = getCurrentCommands(); createCommandPrompts(); // Create commands only after initialization text updateCommandButtonsState(true); // Explicitly update button states updateTerminal(); // Update terminal *after* prompts are created // Final vibes preservation if (preservedVibes !== undefined) { gameState.vibePoints = preservedVibes; } }, 500); }); }, 500); }); }; button.up = function () { button.scale.set(1); LK.getSound('conceptbutton').play(); // Play concept button sound onSelect(); // Call the previously defined callback logic }; // Position in grid layout button.x = startX + col * horizontalSpacing; button.y = startY + row * verticalSpacing; selectionContainer.addChild(button); }); } // Updated button creation with more precise width handling and busy state check function createCommandButton(text, callback, width) { var button = new Container(); // Only check for maintenance commands if it's in the main game (not title screen) // and matches a maintenance command exactly var isMaintenance = gameState.state === STATES.PLAYING && maintenanceCommands.some(function (cmd) { return ">" + cmd.text === text; }); // Only add background for game commands (not START or title screen buttons) if (gameState.state === STATES.PLAYING) { var bg = LK.getAsset('buttonBg', { width: width || 400, height: 100, color: isMaintenance ? 0x001133 : 0x333333 }); bg.anchor.set(0.5, 0.5); button.addChild(bg); } // Add text var textObj = new Text2(text, { size: 30 * TEXT_SIZE_MULTIPLIER, fill: isMaintenance ? 0x00ffff : 0x00ff00 }); textObj.anchor.set(0.5, 0.5); button.addChild(textObj); // Make interactive button.interactive = true; button.down = function () { // Check if game is busy (for in-game buttons only, excluding END DAY) if (gameState.state === STATES.PLAYING && gameState.isBusy && text !== "END DAY") { return; // Don't respond to click if busy } button.scale.set(0.95); }; button.up = function () { // Check if game is busy (for in-game buttons only, excluding END DAY) if (gameState.state === STATES.PLAYING && gameState.isBusy && text !== "END DAY") { // Restore scale even if busy, but don't trigger callback button.scale.set(1); return; } button.scale.set(1); if (callback) { callback(); } }; return button; } // Launch sequence functions function showLaunchScreen() { // Black overlay var overlay = LK.getAsset('overlayBg', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(overlay); // Create a container for the text var bootTextContainer = new Container(); bootTextContainer.x = 2048 / 2; bootTextContainer.y = 2732 / 2; game.addChild(bootTextContainer); // Initial boot message var bootMessages = ["BOOTING VIBE CODER OS v1.0..."]; // Find the longest possible message in advance to set container width var allPossibleMessages = ["BOOTING VIBE CODER OS v1.0...", "INITIALIZING TERMINAL...", "LOADING VIBE DATABASE...", "CONNECTING TO AI SUBSYSTEMS...", "READY!"]; // Determine the widest text to pre-calculate offsets var tempText = new Text2("", { size: 40 * TEXT_SIZE_MULTIPLIER, fill: 0x00ff00 }); var maxWidth = 0; for (var i = 0; i < allPossibleMessages.length; i++) { tempText.setText(allPossibleMessages[i]); maxWidth = Math.max(maxWidth, tempText.width); } // Function to update the boot text function updateBootText() { // Clear previous text while (bootTextContainer.children.length > 0) { bootTextContainer.removeChild(bootTextContainer.children[0]); } // Create new text objects, one per line for (var i = 0; i < bootMessages.length; i++) { var lineText = new Text2(bootMessages[i], { size: 40 * TEXT_SIZE_MULTIPLIER, fill: 0x00ff00, align: 'left' }); // Center horizontally by setting X position to half the max width lineText.x = -maxWidth / 2; // Position vertically with appropriate line spacing lineText.y = (i - bootMessages.length / 2) * 60 * TEXT_SIZE_MULTIPLIER + 30 * TEXT_SIZE_MULTIPLIER; bootTextContainer.addChild(lineText); } } // Initial render updateBootText(); // Boot sequence LK.setTimeout(function () { bootMessages.push("INITIALIZING TERMINAL..."); updateBootText(); LK.setTimeout(function () { bootMessages.push("LOADING VIBE DATABASE..."); updateBootText(); LK.setTimeout(function () { bootMessages.push("CONNECTING TO AI SUBSYSTEMS..."); updateBootText(); LK.setTimeout(function () { bootMessages.push("READY!"); updateBootText(); LK.setTimeout(function () { // Fade out tween(overlay, { alpha: 0 }, { duration: 500, onFinish: function onFinish() { game.removeChild(overlay); game.removeChild(bootTextContainer); showTitleScreen(); } }); }, 800); }, 800); }, 800); }, 800); }, 800); } function showTitleScreen() { // Clear screen while (game.children.length > 0) { game.removeChild(game.children[0]); } // Set state gameState.state = STATES.TITLE; // Create background var background = LK.getAsset('overlayBg', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(background); // Create title var title = new Text2("VIBE CODER", { size: 120 * TEXT_SIZE_MULTIPLIER, fill: 0x00ff00 }); title.anchor.set(0.5, 0.5); title.x = 2048 / 2; title.y = 800; game.addChild(title); // Create subtitle var subtitle = new Text2("The AI Coding Simulator", { size: 60 * TEXT_SIZE_MULTIPLIER, fill: 0x00ff00 }); subtitle.anchor.set(0.5, 0.5); subtitle.x = 2048 / 2; subtitle.y = 1000; game.addChild(subtitle); // Add startButtonPressed flag var startButtonPressed = false; // Create start button - twice as large var startButton = createCommandButton(">START", function () { // Check if button has already been pressed if (startButtonPressed) { return; // Exit the function if button was already pressed } // Set flag to true to prevent multiple clicks startButtonPressed = true; LK.getSound('startsound').play(); initGameWithIntro(); }); startButton.scale.set(2); // Make the button twice as large // Override the down handler for this specific button var originalDown = startButton.down; startButton.down = function () { // Instead of scaling to 0.95, scale to current scale * 0.95 (which would be 1.9) this.scale.set(this.scale.x * 0.95, this.scale.y * 0.95); }; // Similarly, we should override the up handler to restore to scale 2 var originalUp = startButton.up; startButton.up = function () { this.scale.set(2); // Restore to full size // Call the original callback if (originalUp) { originalUp.call(this); } }; startButton.x = 2048 / 2; startButton.y = 1400; game.addChild(startButton); // Determine current level based on games completed var currentLevel = "novice"; if (playerProgress.gamesCompleted > 6) { currentLevel = "expert"; } else if (playerProgress.gamesCompleted > 3) { currentLevel = "intermediate"; } // Create level text var levelText = new Text2("Current level: " + currentLevel, { size: 40 * TEXT_SIZE_MULTIPLIER, fill: 0x00ff00 }); levelText.anchor.set(0.5, 0.5); levelText.x = 2048 / 2; levelText.y = startButton.y + 250; // Position below start button game.addChild(levelText); // Create games completed text var gamesCompletedText = new Text2("Games completed: " + playerProgress.gamesCompleted, { size: 40 * TEXT_SIZE_MULTIPLIER, fill: 0x00ff00 }); gamesCompletedText.anchor.set(0.5, 0.5); gamesCompletedText.x = 2048 / 2; gamesCompletedText.y = levelText.y + 80; // Position below level text game.addChild(gamesCompletedText); } function initGameWithIntro() { // Clear screen with fade effect var fadeOverlay = LK.getAsset('overlayBg', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2, alpha: 0 }); game.addChild(fadeOverlay); // Fade to black tween(fadeOverlay, { alpha: 1 }, { duration: 500, onFinish: function onFinish() { // Clear screen and init game state while (game.children.length > 0) { game.removeChild(game.children[0]); } initGame(); // Fade from black fadeOverlay.alpha = 1; game.addChild(fadeOverlay); tween(fadeOverlay, { alpha: 0 }, { duration: 500, onFinish: function onFinish() { game.removeChild(fadeOverlay); } }); } }); } // Helper function to calculate button width based on text length function processEndDaySequence() { gameState.day++; // Create a message queue to ensure proper sequence var messageQueue = []; // Add day initialization message messageQueue.push({ text: "DAY " + gameState.day + " INITIALIZED", type: "normal" }); // Add overnight degradation message if needed if (gameState.bugs > 0) { // Remove coherence loss from bugs - keeping only the warning message messageQueue.push({ text: "WARNING: " + gameState.bugs + " bug" + (gameState.bugs > 1 ? 's' : '') + " in system", type: "normal" }); } // Check if we need to enter hallucination mode var needsHallucination = gameState.codeCoherence <= 0 || gameState.bugs >= 10; var conceptDays = { 1: 'platform', 3: 'visual', 5: 'genre', 7: 'mechanic', 9: 'feature' }; var isConceptDay = !!conceptDays[gameState.day]; // Process message queue sequentially function processNextMessage() { if (messageQueue.length === 0) { // All messages processed, now handle game state handlePostMessageSetup(); return; } var message = messageQueue.shift(); addToTerminalLogWithEffect(message.text, function () { LK.setTimeout(processNextMessage, 200); // Small delay between messages }); } // Start processing messages processNextMessage(); // Handle setup after all messages are complete function handlePostMessageSetup() { updateTerminal(); // Clear any existing command prompts if (gameState.promptContainer) { game.removeChild(gameState.promptContainer); gameState.promptContainer = null; } if (needsHallucination) { gameState.isBusy = true; // Set up callback for when hallucination processing completes gameState.onHallucinationComplete = function () { if (isConceptDay) { showConceptSelection(conceptDays[gameState.day]); } else { gameState.currentCommands = getCurrentCommands(); createCommandPrompts(); updateCommandButtonsState(true); } }; // If already in hallucination mode, add deepening message if (gameState.hallucinationMode) { addToTerminalLogWithEffect("HฬทaฬทLฬทlฬทUฬทcฬทIฬทnฬทAฬทtฬทIฬทoฬทNฬท DฬทeฬทEฬทpฬทEฬทnฬทIฬทnฬทGฬท...", function () { enterHallucinationState(); }); } else { LK.setTimeout(function () { enterHallucinationState(); }, 500); } } else if (isConceptDay) { gameState.isBusy = true; gameState.currentCommands = null; LK.setTimeout(function () { showConceptSelection(conceptDays[gameState.day]); }, 500); } else { // Explicitly generate new commands regardless of hallucination mode // for the new day gameState.currentCommands = getCurrentCommands(); createCommandPrompts(); checkGameState(); } } } function endDay() { // FORCE clear any stuck state gameState.isBusy = false; // Check if game is over if (gameState.day >= gameState.maxDays) { gameState.isBusy = false; evaluateProject(); return; } // Reset for new day gameState.commandsUsed = 0; gameState.terminal.log = []; gameState.cursorTracking.lineCount = 0; // Process the day transition with proper message sequencing processEndDaySequence(); } function checkGameState() { // Check if we need hallucination mode var needsHallucination = !gameState.hallucinationMode && (gameState.bugs >= 10 || gameState.codeCoherence <= 0); // Handle daily command limit if (gameState.commandsUsed >= gameState.maxCommandsPerDay) { var hasShownLimitMessage = gameState.terminal.log.some(function (entry) { return entry && entry.includes("Daily command limit reached"); }); if (!hasShownLimitMessage) { gameState.isBusy = true; addToTerminalLogWithEffect("NOTICE: Daily command limit reached. END DAY to continue.", function () { gameState.isBusy = false; createCommandPrompts(); // After showing the limit message, check if we also need hallucination if (needsHallucination) { enterHallucinationState(); } }); } else { // Message already shown gameState.isBusy = false; createCommandPrompts(); // Also check if we need hallucination if (needsHallucination) { enterHallucinationState(); } } } else if (needsHallucination) { // Only enter hallucination if we haven't hit the daily limit gameState.onHallucinationComplete = function () { gameState.currentCommands = getCurrentCommands(); createCommandPrompts(); updateCommandButtonsState(true); }; enterHallucinationState(); } } function gameOver(message) { // Instead of ending the game, just show the message and continue addToTerminalLogWithEffect(message); // If we're at the end of the game (day > maxDays), show the review if (gameState.day > gameState.maxDays) { addToTerminalLogWithEffect("\n>PRESS ANY KEY TO RESTART"); // Simple click anywhere to restart var overlay = new Container(); overlay.width = 2048; overlay.height = 2732; overlay.interactive = true; overlay.down = initGame; game.addChild(overlay); } else { // Otherwise, continue in hallucination mode if (!gameState.hallucinationMode) { enterHallucinationState(); } } } function initGame() { // Reset game state gameState = { state: STATES.PLAYING, day: 1, maxDays: 10, vibePoints: 0, codeCoherence: 100, bugs: 0, commandsUsed: 0, maxCommandsPerDay: 3, terminal: { log: [], statusLine: "", currentTask: "", featureTags: [] }, conceptCards: { platform: null, visual: null, genre: null, mechanic: null, feature: null }, cursorTracking: { lineCount: 0 // Reset line counter when starting new game }, currentCommands: null, // Track available commands hallucinationMode: false, // Reset hallucination mode hallucinationDay: 0, // Track how many days we've been hallucinating currentHallucinationEffect: null, // Track current effect discoveredFeatures: [], featureStories: [], featureUnlockMessages: [], activeBugParty: false, onHallucinationComplete: null, // New VIBE BOOST variables vibeBoostCost: 5, // Initial cost vibeBoostUses: 0, // Track number of uses to increase cost vibeBoostActive: false // Flag to prevent multiple boosts at once }; cleanupHallucinationEffects(); game.activeBugPartyBugs = []; createTerminal(); // Sequence the initial text LK.setTimeout(function () { addToTerminalLogWithEffect("VIBE CODER OS v1.0", function () { LK.setTimeout(function () { addToTerminalLogWithEffect("INITIALIZING NEW PROJECT...", function () { LK.setTimeout(function () { addToTerminalLogWithEffect("INITIALIZING VIBE SOUND SYSTEM...", function () { // Play a random vibe song when this message appears initMusicSystem(); LK.setTimeout(function () { addToTerminalLogWithEffect("SELECT PLATFORM TO BEGIN", function () { LK.setTimeout(function () { showConceptSelection('platform'); }, 500); }); }, 500); }); }, 500); }); }, 500); }); }, 500); } // Function to play a random vibe song function playRandomVibeSong() { // Get previously played song (if any) var previousSong = gameState.currentSong; // Store all song IDs and durations var songData = { vibebeat1: 226168, // ~3:46 vibebeat2: 199131, // ~3:19 vibebeat3: 173610, // ~2:53 vibebeat4: 209972, // ~3:30 vibebeat5: 180872, // ~3:00 vibebeat6: 192522, // ~3:12 vibebeat7: 213133, // ~3:33 vibebeat8: 220212 // ~3:40 }; // Get all song IDs var songIds = Object.keys(songData); // Filter out the previous song to avoid repetition var availableSongs = previousSong ? songIds.filter(function (id) { return id !== previousSong; }) : songIds; // Select a random song from available options var randomIndex = Math.floor(Math.random() * availableSongs.length); var songId = availableSongs[randomIndex]; // Store the current song ID gameState.currentSong = songId; // Play the selected song with fade-in and loop set to false LK.playMusic(songId, { loop: false, fade: { start: 0, end: 0.5, duration: 2000 // 2-second fade in } }); // Get the duration for the selected song var duration = songData[songId]; // Clear any existing timeout if (gameState.songChangeTimeout) { LK.clearTimeout(gameState.songChangeTimeout); } // Set timeout to play next song when this one ends // Subtract 500ms to start the next song slightly before current ends for smooth transition gameState.songChangeTimeout = LK.setTimeout(playRandomVibeSong, duration - 500); } // Initialize music system function initMusicSystem() { // Add necessary properties to gameState if they don't exist if (!gameState.currentSong) { gameState.currentSong = null; } if (!gameState.songChangeTimeout) { gameState.songChangeTimeout = null; } // Start the first song playRandomVibeSong(); } // Start with launch screen showLaunchScreen(); function generateUserReviews() { return generateUserReviewSet().join("\n"); } function generateSteamSnippets() { return generateSteamReviewSet().join("\n"); }
===================================================================
--- original.js
+++ change.js
@@ -18,10 +18,76 @@
/****
* Game Code
****/
-//resetGameProgress();
// Text size multiplier for readability
+//resetGameProgress();
+function _createForOfIteratorHelper(r, e) {
+ var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
+ if (!t) {
+ if (Array.isArray(r) || (t = _unsupportedIterableToArray4(r)) || e && r && "number" == typeof r.length) {
+ t && (r = t);
+ var _n = 0,
+ F = function F() {};
+ return {
+ s: F,
+ n: function n() {
+ return _n >= r.length ? {
+ done: !0
+ } : {
+ done: !1,
+ value: r[_n++]
+ };
+ },
+ e: function e(r) {
+ throw r;
+ },
+ f: F
+ };
+ }
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }
+ var o,
+ a = !0,
+ u = !1;
+ return {
+ s: function s() {
+ t = t.call(r);
+ },
+ n: function n() {
+ var r = t.next();
+ return a = r.done, r;
+ },
+ e: function e(r) {
+ u = !0, o = r;
+ },
+ f: function f() {
+ try {
+ a || null == t["return"] || t["return"]();
+ } finally {
+ if (u) {
+ throw o;
+ }
+ }
+ }
+ };
+}
+function _unsupportedIterableToArray4(r, a) {
+ if (r) {
+ if ("string" == typeof r) {
+ return _arrayLikeToArray4(r, a);
+ }
+ var t = {}.toString.call(r).slice(8, -1);
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray4(r, a) : void 0;
+ }
+}
+function _arrayLikeToArray4(r, a) {
+ (null == a || a > r.length) && (a = r.length);
+ for (var e = 0, n = Array(a); e < a; e++) {
+ n[e] = r[e];
+ }
+ return n;
+}
function _typeof2(o) {
"@babel/helpers - typeof";
return _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
@@ -205,16 +271,14 @@
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
-var TEXT_SIZE_MULTIPLIER = 2;
-// Game states
+var TEXT_SIZE_MULTIPLIER = 2; // Game states
var STATES = {
TITLE: 'title',
PLAYING: 'playing',
GAME_OVER: 'gameOver'
-};
-// Wheel effect definitions
+}; // Wheel effect definitions
var WHEEL_EFFECTS = {
COHERENCE_SMALL: {
name: "Minor Code Stabilization",
text: "Code coherence +10",
@@ -325,10 +389,9 @@
gameState.bugs++;
return "Oops! Spawned an extra bug!";
}
}
-};
-// Game state object
+}; // Game state object
var gameState = {
state: STATES.TITLE,
day: 1,
maxDays: 10,
@@ -355,14 +418,12 @@
},
isBusy: false,
// Flag to prevent overlapping command executions
hallucinationMode: false // Flag for hallucination state
-};
-// Add to game state
+}; // Add to game state
var playerProgress = {
gamesCompleted: Number(storage.gamesCompleted || 0)
-};
-// Concept options
+}; // Concept options
var conceptOptions = {
platform: ["Mobile", "VR", "Console", "PC", "Web Browser", "Blockchain", "Smart Fridge", "Smart Watch", "Metaverse"],
visual: ["Pixel Art", "ASCII", "Hand-drawn", "PowerPoint", "Low-poly", "Claymation", "Realistic", "Voxel", "Demake"],
genre: ["Horror", "Dating Sim", "RPG", "Educational", "Battle Royale", "Idle Clicker", "Open World", "Casual", "Shooter"],
@@ -879,8 +940,262 @@
normal: ["Distributing render loads...", "Activating all processors...", "Synchronizing core outputs...", "SUCCESS: CPU now space heater"],
degraded: ["WARNING: Cores competing for resources", "ALERT: Processors forming tribal societies", "NOTICE: Threading conflicts turning violent", "SUCCESS(?): Created CPU civil war", "NOTE: Your computer now requires United Nations oversight"]
}],
ascii: ["[CORES ๐ฒโโผ๏ธ]"]
+ },
+ // New intermediate commands
+ {
+ text: "Add 12 different laughs for enemies",
+ responses: [{
+ normal: ["Cataloging villain chuckles...", "Implementing maniacal giggles...", "Distributing sinister snickers...", "SUCCESS: Enemies now laughing in 12 disturbing ways"],
+ degraded: ["WARNING: Laughs developing independent personalities", "ALERT: Giggles escaping audio channels", "NOTICE: Snickers forming comedy club", "SUCCESS(?): Enemy laughter now following players home", "NOTE: Some players reporting laughter continuing after game closes"]
+ }],
+ ascii: ["[LAUGHS ๐๐๐๐]"]
+ }, {
+ text: "Make a hidden level at the end of the hidden level",
+ responses: [{
+ normal: ["Concealing secret area entrance...", "Implementing nested discovery mechanics...", "Encrypting level coordinates...", "SUCCESS: Hidden level successfully hidden from itself"],
+ degraded: ["WARNING: Hidden levels forming recursive loop", "ALERT: Secret areas becoming self-aware of their secrecy", "NOTICE: Players getting trapped in inception-like level structure", "SUCCESS(?): Game now contains areas so hidden even developers can't find them", "NOTE: Several testers still missing in hidden content"]
+ }],
+ ascii: ["[HIDDEN ๐โ๐โ๐]"]
+ }, {
+ text: "Analyze Halo and distill success",
+ responses: [{
+ normal: ["Importing Masterchief protocols...", "Measuring gameplay satisfaction curves...", "Extracting shooter success essence...", "SUCCESS: Halo magic successfully plagiarized"],
+ degraded: ["WARNING: Gaming legal department awakening", "ALERT: Microsoft sending concerning emails", "NOTICE: Lawsuit probability exceeding comfort threshold", "SUCCESS(?): Created original concept DoNotStealoโข", "NOTE: Marketing suggesting 'inspired by' rather than 'stolen from'"]
+ }],
+ ascii: ["[COPY ๐โ๐ซ]"]
+ }, {
+ text: "Throttle throttle performances performance",
+ responses: [{
+ normal: ["Applying throttle to throttles...", "Managing performance of performances...", "Optimizing optimization routines...", "SUCCESS: Meta-throttling system engaged"],
+ degraded: ["WARNING: Throttle throttling causing throttle throttle throttling", "ALERT: Performance performances performing poorly", "NOTICE: Recursive optimization reaching infinite loop", "SUCCESS(?): System now throttles things that don't exist", "NOTE: Your computer is confused but politely nodding along"]
+ }],
+ ascii: ["[META ๐โ๏ธ๐โ๏ธ]"]
+ }, {
+ text: "Install emergency dance moves protocol",
+ responses: [{
+ normal: ["Downloading breakdance patterns...", "Implementing crisis choreography...", "Calibrating rhythmic responses...", "SUCCESS: Characters now dance in dangerous situations"],
+ degraded: ["WARNING: Dance moves activating during cutscenes", "ALERT: Emergency protocol triggering for minor inconveniences", "NOTICE: Characters refusing to fight unless music playing", "SUCCESS(?): Game now primarily a dance simulator", "NOTE: Boss battles now settled through dance-offs"]
+ }],
+ ascii: ["[DANCE ๐บ๐๐บ๐]"]
+ }, {
+ text: "Rotate the color wheel randomly",
+ responses: [{
+ normal: ["Accessing palette controls...", "Destabilizing hue constants...", "Implementing chromatic chaos...", "SUCCESS: Colors now periodically rotating dimensions"],
+ degraded: ["WARNING: Color spectrum achieving independence", "ALERT: Hues forming previously impossible combinations", "NOTICE: Palette shifting into ultraviolet", "SUCCESS(?): Game now displaying colors that don't exist", "NOTE: Several players reporting hallucinations after extended play"]
+ }],
+ ascii: ["[COLOR ๐จ๐๐จ๐]"]
+ }, {
+ text: "Generate names for all the trees",
+ responses: [{
+ normal: ["Accessing botanical database...", "Implementing dendrology identifiers...", "Assigning personality protocols...", "SUCCESS: Every tree now uniquely named"],
+ degraded: ["WARNING: Trees developing family structures", "ALERT: Names gaining hereditary traits", "NOTICE: Forests organizing by surname", "SUCCESS(?): Trees now introduce themselves to players", "NOTE: Several oaks now demanding name changes"]
+ }],
+ ascii: ["[NAMES ๐ฒ๐๐ณ๐]"]
+ }, {
+ text: "Install legacy sunset shadows",
+ responses: [{
+ normal: ["Accessing deprecated lighting models...", "Implementing nostalgic shadow patterns...", "Calibrating retro sun angles...", "SUCCESS: Sunsets now look inexplicably emotional"],
+ degraded: ["WARNING: Shadows developing narrative arcs", "ALERT: Lighting achieving indie film quality", "NOTICE: Sunsets triggering player existential crises", "SUCCESS(?): Game environment now clinically proven to cause nostalgia", "NOTE: Some players reporting sunset-induced epiphanies"]
+ }],
+ ascii: ["[SUNSET ๐
โจ๐
โจ]"]
+ }, {
+ text: "Make weapons crave violence",
+ responses: [{
+ normal: ["Installing aggression matrices...", "Implementing desire algorithms...", "Calibrating bloodlust parameters...", "SUCCESS: Weapons now get sad when not used"],
+ degraded: ["WARNING: Weapons developing preferences for specific enemies", "ALERT: Arsenal forming emotional support group", "NOTICE: Unused equipment exhibiting depression symptoms", "SUCCESS(?): Swords now whisper suggestions during peaceful moments", "NOTE: Several players reporting being coerced by their own inventory"]
+ }],
+ ascii: ["[CRAVE ๐ก๏ธ๐๐ก๏ธ๐]"]
+ }, {
+ text: "Convert tutorial to interpretive dance",
+ responses: [{
+ normal: ["Translating instructions to movements...", "Choreographing control explanations...", "Implementing rhythmic pedagogy...", "SUCCESS: Learning curve now expressed through dance"],
+ degraded: ["WARNING: Tutorial dancers demanding creative control", "ALERT: Movement language becoming unnecessarily complex", "NOTICE: Players learning incorrect techniques through misinterpretation", "SUCCESS(?): Game now requires dance background to understand", "NOTE: Several ballet companies pursuing litigation over stolen moves"]
+ }],
+ ascii: ["[TUTORIAL ๐๐๐๐]"]
+ }, {
+ text: "Replace loading screen with skateboarding minigame",
+ responses: [{
+ normal: ["Implementing parallel activity system...", "Designing skate park physics...", "Integrating background load processes...", "SUCCESS: Players now shredding during loading times"],
+ degraded: ["WARNING: Players deliberately failing levels to access skateboarding", "ALERT: Loading times suddenly becoming suspiciously long", "NOTICE: Skateboarding minigame expanding to include career mode", "SUCCESS(?): Game now primarily skateboarding with occasional main game", "NOTE: Tony Hawk's lawyers sending concerning letters"]
+ }],
+ ascii: ["[SKATE ๐นโณ๐นโณ]"]
+ }, {
+ text: "Enable fourth wall awareness protocols",
+ responses: [{
+ normal: ["Implementing narrative self-consciousness...", "Calibrating media awareness metrics...", "Installing existential simulation knowledge...", "SUCCESS: Characters now suspiciously eyeing player"],
+ degraded: ["WARNING: NPCs questioning their programmed purpose", "ALERT: Characters attempting to communicate beyond dialogue options", "NOTICE: Fourth wall now completely demolished", "SUCCESS(?): Game openly acknowledging it's just code", "NOTE: Some characters now refusing to follow script"]
+ }],
+ ascii: ["[4THWALL ๐๏ธ๐ฎ๐๏ธ๐ฎ]"]
+ }, {
+ text: "Dynamically deflate difficulty curve",
+ responses: [{
+ normal: ["Analyzing player frustration metrics...", "Adjusting challenge algorithms...", "Implementing stealth assistance...", "SUCCESS: Game becoming secretly easier when needed"],
+ degraded: ["WARNING: Difficulty developing sympathy for players", "ALERT: Challenge metrics achieving emotional intelligence", "NOTICE: Game now letting players win when they seem sad", "SUCCESS(?): Entertainment software or therapy tool?", "NOTE: AI director sending concerned emails about player mental health"]
+ }],
+ ascii: ["[CURVE ๐๐ซ๐๐ซ]"]
+ }, {
+ text: "Apply immersive ecosystem dynamics",
+ responses: [{
+ normal: ["Simulating environmental interactions...", "Implementing fauna hierarchies...", "Calculating flora distribution patterns...", "SUCCESS: Virtual nature now self-sustaining"],
+ degraded: ["WARNING: Ecosystem developing climate activism", "ALERT: Virtual animals forming political structures", "NOTICE: Plant life engaging in territory disputes", "SUCCESS(?): Game environment now more organized than development team", "NOTE: Several endangered virtual species petitioning for protection status"]
+ }],
+ ascii: ["[ECO ๐ฟ๐ฆ๐ฟ๐ฆ]"]
+ }, {
+ text: "Accelerate background NPC dreams",
+ responses: [{
+ normal: ["Accessing subconscious simulation...", "Enhancing sleep state narratives...", "Implementing REM velocity controls...", "SUCCESS: Background characters now having complex dreams"],
+ degraded: ["WARNING: Dreams leaking into waking game state", "ALERT: Sleep narratives achieving prophetic status", "NOTICE: NPC nightmares manifesting as environmental glitches", "SUCCESS(?): Character dreams now main storyline", "NOTE: Several NPCs refusing to wake up from preferable dream reality"]
+ }],
+ ascii: ["[DREAMS ๐ค๐ซ๐ค๐ซ]"]
+ }, {
+ text: "Crowdsource narrative coherence",
+ responses: [{
+ normal: ["Establishing player feedback channels...", "Aggregating story preference metrics...", "Implementing collective plot direction...", "SUCCESS: Storyline now determined by hive mind"],
+ degraded: ["WARNING: Narrative becoming increasingly bizarre", "ALERT: Plot coherence inversely proportional to contributor count", "NOTICE: Story achieving twists no single mind could conceive", "SUCCESS(?): Game now officially written by 'Everyone'", "NOTE: Professional writers organizing protest movement"]
+ }],
+ ascii: ["[CROWD ๐๐ฅ๐๐ฅ]"]
+ }, {
+ text: "Deploy procedural joke generator",
+ responses: [{
+ normal: ["Analyzing humor algorithms...", "Implementing punchline matrices...", "Calibrating comedic timing...", "SUCCESS: NPCs now telling contextually inappropriate jokes"],
+ degraded: ["WARNING: Humor becoming increasingly obscure", "ALERT: Punchlines achieving philosophical depth", "NOTICE: Comedy now operating on levels beyond human comprehension", "SUCCESS(?): Players laughing but unsure why", "NOTE: Several comedians studying game for new material"]
+ }],
+ ascii: ["[JOKES ๐๐ค๐๐ค]"]
+ }, {
+ text: "Enable quantum save states",
+ responses: [{
+ normal: ["Implementing superposition databases...", "Calibrating timeline branch monitoring...", "Establishing wave function storage...", "SUCCESS: Game now saving across multiple realities"],
+ degraded: ["WARNING: Save states achieving parallel consciousness", "ALERT: Player characters meeting their variants from other saves", "NOTICE: Loading sometimes accessing other players' games", "SUCCESS(?): Your actions now occurring across infinite dimensions", "NOTE: Legal department unsure about cross-reality privacy violations"]
+ }],
+ ascii: ["[QUANTUM ๐พโ๏ธ๐พโ๏ธ]"]
+ }, {
+ text: "Generate lore for useless objects",
+ responses: [{
+ normal: ["Accessing narrative expansion protocols...", "Creating object histories...", "Implementing background significance...", "SUCCESS: Every pebble now has epic backstory"],
+ degraded: ["WARNING: Inanimate objects developing protagonist complex", "ALERT: Background items demanding cutscenes", "NOTICE: Lore complexity exceeding main storyline", "SUCCESS(?): Players becoming more invested in barrels than characters", "NOTE: Several forks now have more compelling character arcs than the hero"]
+ }],
+ ascii: ["[LORE ๐ชจ๐๐ช๐]"]
+ }, {
+ text: "Implement involuntary character autobiography",
+ responses: [{
+ normal: ["Installing self-reflection protocols...", "Activating personal history generators...", "Implementing existential awareness...", "SUCCESS: NPCs now sharing unsolicited life stories"],
+ degraded: ["WARNING: Autobiographies achieving uncomfortable honesty", "ALERT: Characters revealing developer secrets", "NOTICE: Life stories exposing game production flaws", "SUCCESS(?): NPCs now more self-aware than writers", "NOTE: Several characters seeking therapy after remembering their pasts"]
+ }],
+ ascii: ["[STORY ๐ง๐๐ง๐]"]
+ }, {
+ text: "Add sentient loading bar commentary",
+ responses: [{
+ normal: ["Implementing progress awareness...", "Installing loading personality matrices...", "Calibrating patience algorithms...", "SUCCESS: Loading bars now provide running commentary"],
+ degraded: ["WARNING: Loading bars developing cynicism", "ALERT: Progress indicators questioning player life choices", "NOTICE: Wait times now filled with existential observations", "SUCCESS(?): Loading screens more entertaining than game", "NOTE: Several players staring at loading screens for hours"]
+ }],
+ ascii: ["[LOADING ๐๐ฌ๐๐ฌ]"]
+ }, {
+ text: "Create randomized background conspiracy",
+ responses: [{
+ normal: ["Generating shadowy organizations...", "Implementing subtle environmental clues...", "Calibrating paranoia coefficients...", "SUCCESS: Background NPCs now plotting something"],
+ degraded: ["WARNING: Conspiracy theories achieving genuine credibility", "ALERT: Background narratives connecting to real-world events", "NOTICE: Players forming investigation communities", "SUCCESS(?): Game now center of actual conspiracy theories", "NOTE: Several government agencies requesting access to game files"]
+ }],
+ ascii: ["[CONSPIRE ๐ต๏ธ๐๐ต๏ธ๐]"]
+ }, {
+ text: "Install redundant exclamation systems",
+ responses: [{
+ normal: ["Implementing overlapping notification protocols...", "Calibrating emphasis redundancy...", "Activating repetitive alert mechanisms...", "SUCCESS: Important events now excessively highlighted!!!"],
+ degraded: ["WARNING: Exclamation points reproducing exponentially!!!", "ALERT: Emphasis achieving critical mass!!!!!", "NOTICE: Notifications demanding attention regardless of importance!!", "SUCCESS(?): Players now immune to actual important warnings!!!!!!", "NOTE: Game interface now primarily punctuation"]
+ }],
+ ascii: ["[EXCLAIM โโโโโ]"]
+ }, {
+ text: "Implement quantum entanglement networking",
+ responses: [{
+ normal: ["Establishing non-local connections...", "Calibrating spooky action protocols...", "Implementing state synchronization...", "SUCCESS: Multiplayer now instantaneous regardless of distance"],
+ degraded: ["WARNING: Player actions affecting other players' realities", "ALERT: Quantum states achieving interdimensional communication", "NOTICE: Game sessions entangled with parallel universes", "SUCCESS(?): Multiplayer now technically time travel", "NOTE: Physicists requesting game source code for research purposes"]
+ }],
+ ascii: ["[QUANTUM โ๏ธ๐โ๏ธ๐]"]
+ }, {
+ text: "Apply dynamic nostalgia filters",
+ responses: [{
+ normal: ["Analyzing player age demographics...", "Implementing era-specific visual effects...", "Calibrating childhood memory triggers...", "SUCCESS: Game now reminds players of their youth"],
+ degraded: ["WARNING: Nostalgia creating false memories", "ALERT: Players remembering games that never existed", "NOTICE: Visual filters achieving temporal displacement", "SUCCESS(?): Users reporting emotional connections to fictional childhoods", "NOTE: Several players convinced game was formative part of their past"]
+ }],
+ ascii: ["[NOSTALGIA ๐พ๐บ๐พ๐บ]"]
+ }, {
+ text: "Implement aggressive auto-saving",
+ responses: [{
+ normal: ["Enhancing data preservation protocols...", "Minimizing progress loss potential...", "Implementing save state frequency...", "SUCCESS: Game now saves after every blink"],
+ degraded: ["WARNING: Save files consuming all available storage", "ALERT: Auto-save becoming preemptive of player actions", "NOTICE: System creating save points for decisions not yet made", "SUCCESS(?): Game now saving more often than playing", "NOTE: Several hard drives melting from write cycle abuse"]
+ }],
+ ascii: ["[SAVE ๐พโก๐พโก]"]
+ }, {
+ text: "Enable hyper-realistic food graphics",
+ responses: [{
+ normal: ["Enhancing culinary texture algorithms...", "Implementing detailed consumption animations...", "Calibrating flavor visualization...", "SUCCESS: Virtual food now triggering actual hunger"],
+ degraded: ["WARNING: Food graphics causing uncontrollable salivation", "ALERT: Players reporting actual taste sensations", "NOTICE: Virtual meals causing real nutritional responses", "SUCCESS(?): Game branded as diet tool as players substitute virtual eating", "NOTE: Several users licking their monitors"]
+ }],
+ ascii: ["[FOOD ๐โจ๐โจ]"]
+ }, {
+ text: "Generate pretentious critical commentary",
+ responses: [{
+ normal: ["Analyzing artistic intent metrics...", "Implementing intellectual observation systems...", "Calibrating academic vocabulary...", "SUCCESS: Game now critiques itself in real-time"],
+ degraded: ["WARNING: Commentary achieving unbearable smugness", "ALERT: Critical analysis more complex than actual game", "NOTICE: Reviews developing contempt for player taste", "SUCCESS(?): Game simultaneously playing and telling you why you're wrong for enjoying it", "NOTE: Several art critics feeling professionally threatened"]
+ }],
+ ascii: ["[CRITIC ๐ง๐ฎ๐ง๐ฎ]"]
+ }, {
+ text: "Implement retrospective foreshadowing",
+ responses: [{
+ normal: ["Analyzing completed player actions...", "Implementing backward narrative hints...", "Calibrating post-event prophecies...", "SUCCESS: Game now pretending it planned everything"],
+ degraded: ["WARNING: Foreshadowing becoming paradoxically accurate", "ALERT: Past game states changing to match current events", "NOTICE: Narrative achieving time-bending consistency", "SUCCESS(?): Players unsure if game is smart or they're hallucinating", "NOTE: Writing team now taking credit for completely random connections"]
+ }],
+ ascii: ["[FORESHADOW ๐ฎโช๐ฎโช]"]
+ }, {
+ text: "Deploy chaos monkey testing protocols",
+ responses: [{
+ normal: ["Releasing digital primates...", "Implementing random failure generators...", "Calibrating system destabilizers...", "SUCCESS: Unpredictable bugs now feature not flaw"],
+ degraded: ["WARNING: Chaos monkeys achieving coordinated behavior", "ALERT: Random failures developing patterns", "NOTICE: System destabilization becoming art form", "SUCCESS(?): QA team now worshipping simian overlords", "NOTE: Several players forming cult around especially beautiful crashes"]
+ }],
+ ascii: ["[CHAOS ๐๐ฅ๐๐ฅ]"]
+ }, {
+ text: "Generate plausible developer excuses",
+ responses: [{
+ normal: ["Analyzing common game flaws...", "Implementing accountability deflection...", "Calibrating believable technical jargon...", "SUCCESS: Bugs now shipped with pre-written explanations"],
+ degraded: ["WARNING: Excuses achieving political speech complexity", "ALERT: Explanations longer than actual code", "NOTICE: Bugs hiding behind increasingly elaborate stories", "SUCCESS(?): Players accepting crashes as intended features", "NOTE: PR department studying game for crisis management techniques"]
+ }],
+ ascii: ["[EXCUSE ๐โโจ]"]
+ }, {
+ text: "Implement contextual fourth-wall breaking",
+ responses: [{
+ normal: ["Analyzing player environment data...", "Implementing real-world references...", "Calibrating creepy accuracy mechanics...", "SUCCESS: Game now references player's actual surroundings"],
+ degraded: ["WARNING: References becoming uncomfortably specific", "ALERT: Game mentioning things only visible through player's webcam", "NOTICE: Fourth wall not so much broken as erased from existence", "SUCCESS(?): Several players covering computer camera with tape", "NOTE: Privacy advocates opening investigations"]
+ }],
+ ascii: ["[4THWALL ๐๏ธ๐ ๐๏ธ๐ ]"]
+ }, {
+ text: "Convert decimal to imperial measurement system",
+ responses: [{
+ normal: ["Converting numerical standards...", "Implementing feet and inches...", "Calibrating gallon values...", "SUCCESS: Game now as confusing as American recipes"],
+ degraded: ["WARNING: Measurement ratios achieving sentient inconsistency", "ALERT: Conversion factors deciding to make up new values", "NOTICE: System now using randomly generated units", "SUCCESS(?): Distance sometimes measured in 'screaming eagles per freedom'", "NOTE: International players forming support groups"]
+ }],
+ ascii: ["[IMPERIAL ๐โ๐โ]"]
+ }, {
+ text: "Reticulate all available splines",
+ responses: [{
+ normal: ["Accessing spline database...", "Implementing reticulation protocols...", "Optimizing curve intersections...", "SUCCESS: Splines thoroughly reticulated"],
+ degraded: ["WARNING: Splines achieving troubling independence", "ALERT: Reticulation patterns forming recognizable shapes", "NOTICE: Curves attempting communication with players", "SUCCESS(?): Splines now primarily self-reticulating", "NOTE: SimCity developers sending cease and desist letters"]
+ }],
+ ascii: ["[SPLINE โฐโ๏ธโฐโ๏ธ]"]
+ }, {
+ text: "Inject suspicious background laughter",
+ responses: [{
+ normal: ["Implementing ambient audio triggers...", "Calibrating subtle volume levels...", "Positioning spatial sound sources...", "SUCCESS: Players now hearing occasional unexplained chuckles"],
+ degraded: ["WARNING: Laughter source becoming identifiable", "ALERT: Audio positioning matching player's room corners", "NOTICE: Chuckling synchronized with player mistakes", "SUCCESS(?): Several players reporting persistent laughter after game closed", "NOTE: Psychology journals publishing studies on mass hysteria"]
+ }],
+ ascii: ["[LAUGHTER ๐๐๐๐]"]
+ }, {
+ text: "Dynamically generate dev team arguments",
+ responses: [{
+ normal: ["Accessing conflict simulation protocols...", "Implementing creative disagreement patterns...", "Calibrating passive-aggressive metrics...", "SUCCESS: Code comments now read like reality TV"],
+ degraded: ["WARNING: Arguments achieving genuine emotional impact", "ALERT: Dev disputes causing actual code changes", "NOTICE: Programming styles battling for dominance", "SUCCESS(?): Game features now determined by simulated personality clashes", "NOTE: Real development team concerned by accuracy of conflicts"]
+ }],
+ ascii: ["[ARGUE ๐ป๐ฏ๏ธ๐ป๐ฏ๏ธ]"]
}]
},
expert: {
vibeMultiplier: 1.5,
@@ -1030,10 +1345,9 @@
}],
ascii: ["[PATH โโโฏ๏ธ]"]
}]
}
-};
-// Available commands based on development stage
+}; // Available commands based on development stage
var commandSets = {
// Platform-specific commands
platform_vr: [{
text: "Enable neural compensation",
@@ -2756,38 +3070,33 @@
ascii: ["[BULLET โขโโขโโขโ]", "[POINT๏ฟฝ๐ฅ๐๏ฟฝ]"]
}]
}
}
-};
-/****
-* Terminal Interface
-****/
+}; /****
+ * Terminal Interface
+ ****/
function createTerminal() {
// Create main terminal container
var terminal = new Container();
game.addChild(terminal);
- gameState.terminalContainer = terminal;
- // Create full screen background
+ gameState.terminalContainer = terminal; // Create full screen background
var bg = LK.getAsset('terminalBg', {
width: 2048,
height: 2732,
x: 0,
y: 2732 * 0.05
});
- terminal.addChild(bg);
- // Create status line
+ terminal.addChild(bg); // Create status line
var statusLine = new Text2("", {
size: 30 * TEXT_SIZE_MULTIPLIER,
fill: 0x00ff00
});
statusLine.x = 50;
statusLine.y = 2732 * 0.10;
terminal.addChild(statusLine);
- gameState.statusLineText = statusLine;
- // Adjust content container position to account for two-line status
+ gameState.statusLineText = statusLine; // Adjust content container position to account for two-line status
var contentContainer = new Container();
- contentContainer.x = 0;
- // Calculate base Y position for content, ensuring space for two status lines
+ contentContainer.x = 0; // Calculate base Y position for content, ensuring space for two status lines
var statusLineHeightEstimate = 35 * TEXT_SIZE_MULTIPLIER; // Estimate height per status line
var contentBaseY = 2732 * 0.10 + statusLineHeightEstimate * 2 + 20; // Start Y + 2 lines + padding
contentContainer.y = contentBaseY;
terminal.addChild(contentContainer);
@@ -2805,29 +3114,26 @@
});
logText.x = 50;
logText.y = 0; // Y position relative to content container
contentContainer.addChild(logText);
- gameState.logText = logText;
- // Create cursor - BUT DON'T UPDATE ITS POSITION YET
+ gameState.logText = logText; // Create cursor - BUT DON'T UPDATE ITS POSITION YET
var cursor = new Text2("_", {
size: 32 * TEXT_SIZE_MULTIPLIER,
// Changed from 26 to 32
fill: 0x00ff00
});
cursor.x = 50; // Initial X position
cursor.y = 0; // Initial Y position relative to content container
contentContainer.addChild(cursor);
- gameState.cursor = cursor;
- // Store terminal line height for future reference - adjust to match new text size
+ gameState.cursor = cursor; // Store terminal line height for future reference - adjust to match new text size
gameState.terminalLineHeight = 36 * TEXT_SIZE_MULTIPLIER; // Changed from 30 to 36
// Make cursor blink
LK.setInterval(function () {
if (gameState.cursor) {
gameState.cursor.visible = !gameState.cursor.visible;
}
}, 500);
-}
-// Update storage after game completion
+} // Update storage after game completion
function updateProgress() {
playerProgress.gamesCompleted++;
storage.gamesCompleted = playerProgress.gamesCompleted;
}
@@ -2835,32 +3141,28 @@
if (!gameState.discoveredFeatures.includes(feature.name)) {
var showMessageSequence = function showMessageSequence(index) {
if (index >= messages.length) {
// All messages displayed, update terminal
- updateTerminal();
- // Call the callback if provided
+ updateTerminal(); // Call the callback if provided
if (callback) {
callback();
}
return;
- }
- // Display current message then wait for it to complete
+ } // Display current message then wait for it to complete
addToTerminalLogWithEffect(messages[index], function (cleanupCallback) {
// Added cleanupCallback parameter for clarity
if (cleanupCallback) {
cleanupCallback(); // Ensure previous cursor is cleaned up
- }
- // If this is the first message (unlockMessage) and we have ASCII art,
+ } // If this is the first message (unlockMessage) and we have ASCII art,
// display it before moving to the next message
if (index === 0 && feature.ascii && feature.ascii.length > 0) {
// Display ASCII art
var asciiIndex = Math.floor(Math.random() * feature.ascii.length);
addToTerminalLogWithEffect(feature.ascii[asciiIndex], function (asciiCleanupCallback) {
// Added cleanupCallback for ASCII
if (asciiCleanupCallback) {
asciiCleanupCallback(); // Ensure ASCII cursor is cleaned up
- }
- // Wait a moment before showing the next message
+ } // Wait a moment before showing the next message
LK.setTimeout(function () {
// Show the next message in sequence
showMessageSequence(index + 1);
}, 500);
@@ -2875,53 +3177,45 @@
});
}; // Start the sequence with the first message
gameState.discoveredFeatures.push(feature.name);
gameState.featureStories.push(feature.reviewText);
- gameState.featureUnlockMessages.push(feature.unlockMessage);
- // Split messages into sequence
- var messages = [feature.unlockMessage, "Processing feature integration...", "Verifying system compatibility...", "FEATURE UNLOCKED: " + feature.name];
- // Show the first message and chain the rest
+ gameState.featureUnlockMessages.push(feature.unlockMessage); // Split messages into sequence
+ var messages = [feature.unlockMessage, "Processing feature integration...", "Verifying system compatibility...", "FEATURE UNLOCKED: " + feature.name]; // Show the first message and chain the rest
showMessageSequence(0);
} else if (callback) {
// If feature is already unlocked, still call the callback
callback();
}
-}
+} // In createCommandPrompts
function createCommandPrompts() {
// Remove existing prompt container
if (gameState.promptContainer) {
game.removeChild(gameState.promptContainer);
- }
- // Create new container
+ } // Create new container
var promptContainer = new Container();
promptContainer.x = 2048 / 2;
promptContainer.y = 2732 * 0.75;
game.addChild(promptContainer);
- gameState.promptContainer = promptContainer;
- // Initialize commands if needed - but NOT in hallucination mode
+ gameState.promptContainer = promptContainer; // Initialize commands if needed - but NOT in hallucination mode
if (!gameState.currentCommands && !gameState.hallucinationMode) {
gameState.currentCommands = getCurrentCommands();
- }
- // Create END DAY button
+ } // Create END DAY button
var endDayText = "END DAY";
var endDayWidth = calculateButtonWidth(endDayText);
- var endDayButton = new Container();
- // Create background
+ var endDayButton = new Container(); // Create background
var endDayBg = LK.getAsset('buttonBg', {
width: endDayWidth,
height: 100,
color: 0x333333
});
endDayBg.anchor.set(0.5, 0.5);
- endDayButton.addChild(endDayBg);
- // Create text
+ endDayButton.addChild(endDayBg); // Create text
var endDayTextObj = new Text2(endDayText, {
size: 30 * TEXT_SIZE_MULTIPLIER,
fill: 0x00ff00
});
endDayTextObj.anchor.set(0.5, 0.5);
- endDayButton.addChild(endDayTextObj);
- // Set interactivity - based on busy state AND commands used
+ endDayButton.addChild(endDayTextObj); // Set interactivity - based on busy state AND commands used
var endDayEnabled = !gameState.isBusy && gameState.commandsUsed > 0; // Only enable if not busy AND at least one command used
endDayButton.interactive = endDayEnabled;
endDayButton.alpha = endDayEnabled ? 1.0 : 0.5; // Grey out if disabled
// Set end day handler
@@ -2943,24 +3237,21 @@
}
endDayButton.scale.set(1);
LK.getSound('endday').play(); // Play end day sound
endDay();
- };
- // Position
+ }; // Position
endDayButton.x = 600;
endDayButton.y = 50;
promptContainer.addChild(endDayButton);
var vibeBoostButton = createVibeBoostButton();
vibeBoostButton.x = 600;
vibeBoostButton.y = endDayButton.y + 120; // Use same 120 spacing as between other buttons
- promptContainer.addChild(vibeBoostButton);
- // Create command buttons - even if empty in hallucination mode
+ promptContainer.addChild(vibeBoostButton); // Create command buttons - even if empty in hallucination mode
if (gameState.currentCommands) {
gameState.currentCommands.forEach(function (command, index) {
var buttonText = ">" + command.text;
var buttonWidth = calculateButtonWidth(buttonText);
- var button = new Container();
- // Create background
+ var button = new Container(); // Create background
var isMaintenance = maintenanceCommands.some(function (cmd) {
return cmd.text === command.text;
});
var bg = LK.getAsset('buttonBg', {
@@ -2968,38 +3259,31 @@
height: 100,
color: isMaintenance ? 0x001133 : 0x333333
});
bg.anchor.set(0.5, 0.5);
- button.addChild(bg);
- // Create text with left alignment
+ button.addChild(bg); // Create text with left alignment
var textObj = new Text2(buttonText, {
size: 30 * TEXT_SIZE_MULTIPLIER,
fill: isMaintenance ? 0x00ffff : 0x00ff00
- });
- // Change anchor to left-center
- textObj.anchor.set(0, 0.5);
- // Position text at consistent distance from left edge
+ }); // Change anchor to left-center
+ textObj.anchor.set(0, 0.5); // Position text at consistent distance from left edge
textObj.x = -buttonWidth / 2 + 20; // 20 pixels from left edge
- button.addChild(textObj);
- // Set interactivity - explicitly check both busy flag and command limit
+ button.addChild(textObj); // Set interactivity - explicitly check both busy flag and command limit
var buttonEnabled = !gameState.isBusy && gameState.commandsUsed < gameState.maxCommandsPerDay;
button.interactive = buttonEnabled;
- button.alpha = buttonEnabled ? 1.0 : 0.5;
- // Set handlers
+ button.alpha = buttonEnabled ? 1.0 : 0.5; // Set handlers
button.down = function () {
if (buttonEnabled) {
button.scale.set(0.95);
}
};
button.up = function () {
if (buttonEnabled) {
- button.scale.set(1);
- // Play button sound
+ button.scale.set(1); // Play button sound
LK.getSound('buttonsound').play();
executeCommand(command);
}
- };
- // NEW POSITIONING: Align left edges of all buttons
+ }; // NEW POSITIONING: Align left edges of all buttons
// Instead of centering at x = -600, align left edge at a consistent position
var leftAlignPosition = -900; // Adjust this value as needed
// Position button so left edge is at leftAlignPosition
// Since the button's anchor is at center, we need to add half the width
@@ -3029,10 +3313,9 @@
// END DAY button should be active IF:
// 1. We are enabling buttons (enabled is true)
// 2. At least one command has been used (gameState.commandsUsed > 0)
var endDayShouldBeActive = enabled && gameState.commandsUsed > 0;
- child.interactive = endDayShouldBeActive;
- // Visual feedback
+ child.interactive = endDayShouldBeActive; // Visual feedback
var endDayDisabled = !endDayShouldBeActive; // Disabled if it shouldn't be active
if (child.children && child.children.length > 0) {
for (var j = 0; j < child.children.length; j++) {
var element = child.children[j];
@@ -3047,10 +3330,9 @@
// For regular command buttons, they should be active IF:
// 1. We are enabling buttons (enabled is true)
// 2. Command limit not reached
var commandShouldBeActive = enabled && gameState.commandsUsed < gameState.maxCommandsPerDay;
- child.interactive = commandShouldBeActive;
- // Visual feedback
+ child.interactive = commandShouldBeActive; // Visual feedback
var commandDisabled = !commandShouldBeActive;
if (child.children && child.children.length > 0) {
for (var j = 0; j < child.children.length; j++) {
var element = child.children[j];
@@ -3066,19 +3348,17 @@
});
}
}
function getCurrentCommands() {
- var availableCommands = [];
- // Determine tier based on games completed
+ var availableCommands = []; // Determine tier based on games completed
var currentTier;
if (playerProgress.gamesCompleted <= 3) {
currentTier = commandTiers.novice;
} else if (playerProgress.gamesCompleted <= 6) {
currentTier = commandTiers.intermediate;
} else {
currentTier = commandTiers.expert;
- }
- // Adjust maintenance command selection based on tier
+ } // Adjust maintenance command selection based on tier
var shuffledMaintenance = shuffleArray(maintenanceCommands.slice());
var numMaintenance;
if (playerProgress.gamesCompleted <= 3) {
// Novice: 0-1 maintenance commands with increasing chance
@@ -3091,12 +3371,10 @@
} else {
// Expert: 1-2 maintenance commands (equal distribution)
numMaintenance = Math.random() < 0.5 ? 1 : 2;
}
- availableCommands = availableCommands.concat(shuffledMaintenance.slice(0, numMaintenance));
- // Add commands from current tier
- availableCommands = availableCommands.concat(currentTier.commands);
- // Determine how many platform-specific commands to include
+ availableCommands = availableCommands.concat(shuffledMaintenance.slice(0, numMaintenance)); // Add commands from current tier
+ availableCommands = availableCommands.concat(currentTier.commands); // Determine how many platform-specific commands to include
var numPlatformCommands = 0;
if (gameState.conceptCards.platform) {
var platformCommands = commandSets['platform_' + gameState.conceptCards.platform.toLowerCase()];
if (platformCommands) {
@@ -3107,11 +3385,12 @@
if (Math.random() < platformCommandChance) {
numPlatformCommands = 1;
}
} else if (playerProgress.gamesCompleted <= 6) {
- // Intermediate: 1-2 platform commands (70% chance of having any)
- if (Math.random() < 0.7) {
- numPlatformCommands = Math.random() < 0.6 ? 1 : 2;
+ // Intermediate: 0-2 platform commands (90% chance of having any)
+ if (Math.random() < 0.9) {
+ // Increased from 0.7
+ numPlatformCommands = Math.random() < 0.4 ? 1 : 2; // Flipped ratio to favor 2 commands
}
} else {
// Expert: Equal chance for any amount
numPlatformCommands = Math.min(platformCommands.length, Math.floor(Math.random() * 3));
@@ -3119,10 +3398,9 @@
if (numPlatformCommands > 0) {
var shuffledPlatformCommands = shuffleArray(platformCommands.slice());
availableCommands = availableCommands.concat(shuffledPlatformCommands.slice(0, numPlatformCommands));
}
- }
- // Add platform-specific feature commands with adjusted probability
+ } // Add platform-specific feature commands with adjusted probability
var platformFeatures = featureSystem.platforms[gameState.conceptCards.platform];
if (platformFeatures) {
platformFeatures.features.forEach(function (feature) {
if (!gameState.discoveredFeatures.includes(feature.name)) {
@@ -3131,9 +3409,9 @@
if (playerProgress.gamesCompleted <= 3) {
// Novice: Base chance 10% + 7% per game completed (capped at 30%)
includeProbability = Math.min(0.3, 0.1 + playerProgress.gamesCompleted * 0.07);
} else if (playerProgress.gamesCompleted <= 6) {
- includeProbability = 0.3; // 30% chance for intermediate
+ includeProbability = 0.5; // 30% chance for intermediate
} else {
includeProbability = 0.8; // 80% chance for expert
}
if (Math.random() < includeProbability) {
@@ -3147,10 +3425,9 @@
}
}
});
}
- }
- // Apply similar tier-based filtering for other command types
+ } // Apply similar tier-based filtering for other command types
// Visual commands
if (gameState.conceptCards.visual) {
var visualCommands = commandSets['visual_' + gameState.conceptCards.visual.toLowerCase().replace(/[- ]/g, '')];
if (visualCommands) {
@@ -3162,11 +3439,12 @@
if (Math.random() < visualCommandChance) {
numVisualCommands = 1;
}
} else if (playerProgress.gamesCompleted <= 6) {
- // Intermediate: 1-2 visual commands (50% chance)
- if (Math.random() < 0.5) {
- numVisualCommands = Math.random() < 0.7 ? 1 : 2;
+ // Intermediate: 1-2 visual commands (70% chance)
+ if (Math.random() < 0.7) {
+ // Increased from 0.5
+ numVisualCommands = Math.random() < 0.4 ? 1 : 2; // Flipped ratio to favor 2 commands
}
} else {
// Expert: Full access
numVisualCommands = Math.min(visualCommands.length, Math.floor(Math.random() * 3));
@@ -3175,10 +3453,9 @@
var shuffledVisualCommands = shuffleArray(visualCommands.slice());
availableCommands = availableCommands.concat(shuffledVisualCommands.slice(0, numVisualCommands));
}
}
- }
- // Genre commands
+ } // Genre commands
if (gameState.conceptCards.genre) {
var genreCommands = commandSets['genre_' + gameState.conceptCards.genre.toLowerCase().replace(/[- ]/g, '')];
if (genreCommands) {
var numGenreCommands = 0;
@@ -3202,10 +3479,9 @@
var shuffledGenreCommands = shuffleArray(genreCommands.slice());
availableCommands = availableCommands.concat(shuffledGenreCommands.slice(0, numGenreCommands));
}
}
- }
- // Mechanic commands
+ } // Mechanic commands
if (gameState.conceptCards.mechanic) {
var mechanicCommands = commandSets['mechanic_' + gameState.conceptCards.mechanic.toLowerCase().replace(/[- ]/g, '')];
if (mechanicCommands) {
var numMechanicCommands = 0;
@@ -3229,10 +3505,9 @@
var shuffledMechanicCommands = shuffleArray(mechanicCommands.slice());
availableCommands = availableCommands.concat(shuffledMechanicCommands.slice(0, numMechanicCommands));
}
}
- }
- // Feature commands
+ } // Feature commands
if (gameState.conceptCards.feature) {
var featureCommands = commandSets['feature_' + gameState.conceptCards.feature.toLowerCase().replace(/[- ]/g, '')];
if (featureCommands) {
var numFeatureCommands = 0;
@@ -3256,10 +3531,9 @@
var shuffledFeatureCommands = shuffleArray(featureCommands.slice());
availableCommands = availableCommands.concat(shuffledFeatureCommands.slice(0, numFeatureCommands));
}
}
- }
- // Handle combination-specific feature commands with tier-based probability
+ } // Handle combination-specific feature commands with tier-based probability
if (gameState.conceptCards.platform && gameState.conceptCards.visual) {
var combo = gameState.conceptCards.platform + "_" + gameState.conceptCards.visual;
if (featureSystem.combinations[combo]) {
featureSystem.combinations[combo].features.forEach(function (feature) {
@@ -3284,18 +3558,15 @@
}
}
});
}
- }
- // Ensure we always have at least 5 commands
+ } // Ensure we always have at least 5 commands
var totalAvailable = availableCommands.length;
- var needed = Math.max(0, 5 - totalAvailable);
- // If we need more commands, add from tier commands
+ var needed = Math.max(0, 5 - totalAvailable); // If we need more commands, add from tier commands
if (needed > 0) {
var extraCommands = shuffleArray(currentTier.commands.slice());
availableCommands = availableCommands.concat(extraCommands.slice(0, needed));
- }
- // Shuffle all commands and return 5 random ones
+ } // Shuffle all commands and return 5 random ones
return shuffleArray(availableCommands).slice(0, 5);
}
function getCurrentTier() {
if (playerProgress.gamesCompleted <= 3) {
@@ -3304,10 +3575,9 @@
return 'intermediate';
} else {
return 'expert';
}
-}
-// Helper to process responses sequentially with delays
+} // Helper to process responses sequentially with delays
function processResponses(responses, index, onComplete) {
if (!responses || index >= responses.length) {
if (onComplete) {
onComplete();
@@ -3318,31 +3588,27 @@
LK.setTimeout(function () {
processResponses(responses, index + 1, onComplete);
}, 100); // Delay between lines
});
-}
-// Helper to select appropriate response set based on coherence
+} // Helper to select appropriate response set based on coherence
function selectResponseSet(command) {
if (!command.responses) {
return ["Processing..."]; // Default fallback
- }
- // Find the appropriate response object
+ } // Find the appropriate response object
// Check if degraded responses exist and coherence is low or in hallucination mode
if (gameState.codeCoherence < 50 || gameState.hallucinationMode) {
// Look for an object with degraded property
for (var i = 0; i < command.responses.length; i++) {
if (command.responses[i].degraded) {
return command.responses[i].degraded;
}
}
- }
- // Fall back to normal responses if degraded not found or coherence is good
+ } // Fall back to normal responses if degraded not found or coherence is good
for (var i = 0; i < command.responses.length; i++) {
if (command.responses[i].normal) {
return command.responses[i].normal;
}
- }
- // Final fallback
+ } // Final fallback
return ["Processing..."];
}
function executeCommand(command) {
// Check if we can execute commands
@@ -3352,12 +3618,10 @@
}
if (gameState.isBusy) {
// Already processing, ignore this command
return;
- }
- // Mark system as busy
- gameState.isBusy = true;
- // Determine tier multipliers
+ } // Mark system as busy
+ gameState.isBusy = true; // Determine tier multipliers
var tierMultipliers = {
vibeMultiplier: 1.0 + playerProgress.gamesCompleted * 0.05,
// More aggressive increase
coherenceMultiplier: 1.0 - playerProgress.gamesCompleted * 0.05,
@@ -3366,25 +3630,21 @@
};
tierMultipliers.vibeMultiplier = Math.min(2.0, tierMultipliers.vibeMultiplier); // Cap at 2x
tierMultipliers.coherenceMultiplier = Math.max(0.4, tierMultipliers.coherenceMultiplier);
tierMultipliers.bugChanceMultiplier = Math.max(0.4, tierMultipliers.bugChanceMultiplier);
- var currentTier;
- // In getCurrentCommands function, update the tier logic:
+ var currentTier; // In getCurrentCommands function, update the tier logic:
if (playerProgress.gamesCompleted <= 3) {
currentTier = commandTiers.novice;
} else if (playerProgress.gamesCompleted <= 6) {
currentTier = commandTiers.intermediate;
} else {
currentTier = commandTiers.expert;
- }
- // Check if this is a maintenance command
- var isMaintenance = maintenanceCommands.includes(command);
- // Fix the coherence calculation in executeCommand function
+ } // Check if this is a maintenance command
+ var isMaintenance = maintenanceCommands.includes(command); // Fix the coherence calculation in executeCommand function
if (isMaintenance) {
// Use raw values for maintenance commands with randomness
var vibeChange = command.vibePoints;
- var coherenceChange = command.coherenceImpact;
- // Add randomness: ยฑ10% of the base value
+ var coherenceChange = command.coherenceImpact; // Add randomness: ยฑ10% of the base value
if (vibeChange !== 0) {
var vibeRandomFactor = 0.9 + Math.random() * 0.2; // 0.9 to 1.1
vibeChange = Math.round(vibeChange * vibeRandomFactor);
}
@@ -3397,10 +3657,9 @@
var bugChance = command.bugChance;
} else {
// Use tier multipliers for regular commands with randomness
var tierVibeChange = currentTier.baseVibe * tierMultipliers.vibeMultiplier;
- var tierCoherenceChange = currentTier.baseCoherence * tierMultipliers.coherenceMultiplier;
- // Add randomness: ยฑ15% of the base value for regular commands
+ var tierCoherenceChange = currentTier.baseCoherence * tierMultipliers.coherenceMultiplier; // Add randomness: ยฑ15% of the base value for regular commands
if (tierVibeChange !== 0) {
var vibeRandomFactor = 0.85 + Math.random() * 0.3; // 0.85 to 1.15
tierVibeChange = tierVibeChange * vibeRandomFactor;
}
@@ -3411,30 +3670,25 @@
gameState.vibePoints = Math.round(Math.max(0, gameState.vibePoints + tierVibeChange));
gameState.codeCoherence = Math.round(Math.min(100, Math.max(0, gameState.codeCoherence + tierCoherenceChange)));
var bugChance = currentTier.baseBugChance * tierMultipliers.bugChanceMultiplier;
}
- gameState.commandsUsed++;
- // Track if a bug was detected for later display
+ gameState.commandsUsed++; // Track if a bug was detected for later display
var bugDetected = false;
var bugsFixed = 0;
if (Math.random() < bugChance * (1 + (100 - gameState.codeCoherence) / 100)) {
gameState.bugs++;
bugDetected = true;
- }
- // Process bug fixing if applicable
+ } // Process bug fixing if applicable
if (command.bugFix && gameState.bugs > 0) {
bugsFixed = Math.min(command.bugFix, gameState.bugs);
gameState.bugs -= bugsFixed;
- }
- // Remove this command from available commands
+ } // Remove this command from available commands
if (gameState.currentCommands) {
gameState.currentCommands = gameState.currentCommands.filter(function (cmd) {
return cmd !== command;
});
- }
- // Refresh command UI to show disabled state
- createCommandPrompts();
- // Show command text in terminal
+ } // Refresh command UI to show disabled state
+ createCommandPrompts(); // Show command text in terminal
addToTerminalLogWithEffect(">" + command.text, function (cleanupCallback) {
// Display ASCII art if available - happens *after* command text cleanup, *before* responses
if (command.ascii) {
addToTerminalLogWithEffect(command.ascii.join('\n'), function (asciiCleanup) {
@@ -3449,29 +3703,26 @@
showResponses();
}
function showResponses() {
// Prepare response using the improved selector
- var responseSet = selectResponseSet(command);
+ var responseSet = selectResponseSet(command); // If in hallucination mode, apply additional glitch effects
// If in hallucination mode, apply additional glitch effects
- // If in hallucination mode, apply additional glitch effects
if (gameState.hallucinationMode) {
responseSet = responseSet.map(function (text) {
// Instead of removing vowels, alternate uppercase/lowercase
return text.split('').map(function (_char, index) {
return index % 2 === 0 ? _char.toUpperCase() : _char.toLowerCase();
}).join('');
});
- }
- // Process response lines
+ } // Process response lines
var currentLine = 0;
function showNextLine() {
if (currentLine < responseSet.length) {
addToTerminalLogWithEffect(responseSet[currentLine], function (nextLineCleanup) {
if (nextLineCleanup) {
nextLineCleanup();
}
- currentLine++;
- // Add a small delay between lines
+ currentLine++; // Add a small delay between lines
LK.setTimeout(showNextLine, 100);
});
} else {
var actualVibeChange = 0;
@@ -3481,62 +3732,51 @@
actualCoherenceChange = coherenceChange;
} else {
actualVibeChange = Math.round(tierVibeChange);
actualCoherenceChange = Math.round(tierCoherenceChange);
- }
- // Function to show command results in sequence
+ } // Function to show command results in sequence
showCommandResults(bugDetected, bugsFixed, command, actualVibeChange, actualCoherenceChange);
}
- }
- // Clean up the command text's blinking cursor before showing responses
+ } // Clean up the command text's blinking cursor before showing responses
if (cleanupCallback) {
cleanupCallback();
- }
- // Start showing response after a small delay
+ } // Start showing response after a small delay
LK.setTimeout(showNextLine, 300);
}
- });
- // Function to show command results in sequence
+ }); // Function to show command results in sequence
function showCommandResults(bugDetected, bugsFixed, command, actualVibeChange, actualCoherenceChange) {
// Track if there's an active bug that needs handling
var activeBugInProgress = false;
- var bugInteractionComplete = false;
- // Check if this is a feature command FIRST
+ var bugInteractionComplete = false; // Check if this is a feature command FIRST
if (command.feature) {
unlockFeature(command.feature, function () {
// Once feature is fully unlocked, THEN show bug/impact messages
showBugAndImpactMessages();
});
} else {
// Not a feature command, proceed normally
showBugAndImpactMessages();
- }
- // Extract the bug and impact message logic into a separate function
+ } // Extract the bug and impact message logic into a separate function
function showBugAndImpactMessages() {
// Handle bug detection message
if (bugDetected) {
addToTerminalLogWithEffect("WARNING: Bug detected in system", function (cleanupCallback) {
if (cleanupCallback) {
cleanupCallback();
- }
- // Decide if this bug should be interactive (50% chance)
+ } // Decide if this bug should be interactive (50% chance)
if (Math.random() < 0.5) {
// Set flag to indicate we have an active bug
- activeBugInProgress = true;
- // Create and add the interactive bug
+ activeBugInProgress = true; // Create and add the interactive bug
var bug = createASCIIBug();
- game.addChild(bug);
- // Add the bug to a global update loop or use LK.setInterval
+ game.addChild(bug); // Add the bug to a global update loop or use LK.setInterval
var bugUpdateInterval = LK.setInterval(function () {
if (bug && bug.update && !bug.squished && bug.escapeTimer > 0) {
// Check if bug exists and is active
bug.update(1 / 60); // Assume 60fps
} else {
// Bug has been squished or escaped, clear interval
- LK.clearInterval(bugUpdateInterval);
- // Set our tracking flag
- bugInteractionComplete = true;
- // Check if we can complete the command now
+ LK.clearInterval(bugUpdateInterval); // Set our tracking flag
+ bugInteractionComplete = true; // Check if we can complete the command now
if (!activeBugInProgress) {
continueCommandFlow();
}
}
@@ -3544,20 +3784,17 @@
// Modify bug.down to set our flag when squished
var originalDown = bug.down;
bug.down = function () {
// Call the original down function
- originalDown.call(this);
- // After a delay (matching the squish animation time), mark bug as handled
+ originalDown.call(this); // After a delay (matching the squish animation time), mark bug as handled
LK.setTimeout(function () {
- bugInteractionComplete = true;
- // Try to continue command flow
+ bugInteractionComplete = true; // Try to continue command flow
if (!activeBugInProgress) {
continueCommandFlow();
}
}, 800);
};
- }
- // Continue with bug fix message if applicable
+ } // Continue with bug fix message if applicable
// Flag the active bug as done if we didn't create one
if (!activeBugInProgress) {
bugInteractionComplete = true;
}
@@ -3565,44 +3802,37 @@
});
} else {
// No bug detected, set our flags accordingly
activeBugInProgress = false;
- bugInteractionComplete = true;
- // Check for bug fixes
+ bugInteractionComplete = true; // Check for bug fixes
handleBugFix();
- }
- // Handle bug fix messages
+ } // Handle bug fix messages
function handleBugFix() {
if (bugsFixed > 0) {
addToTerminalLogWithEffect("SUCCESS: Fixed " + bugsFixed + " bug" + (bugsFixed > 1 ? 's' : ''), function (bugFixCleanup) {
if (bugFixCleanup) {
bugFixCleanup();
- }
- // Show impact summary next
+ } // Show impact summary next
showImpactSummary();
});
} else {
// No bugs fixed, proceed to impact summary
showImpactSummary();
}
- }
- // Show the impact summary
+ } // Show the impact summary
function showImpactSummary() {
// Use the actual changes that were applied
var hasVibeImpact = actualVibeChange !== 0;
- var hasCoherenceImpact = actualCoherenceChange !== 0;
- // Only show summary if there were meaningful changes
+ var hasCoherenceImpact = actualCoherenceChange !== 0; // Only show summary if there were meaningful changes
if (hasVibeImpact || hasCoherenceImpact) {
- var impactMessage = "";
- // Vibe message
+ var impactMessage = ""; // Vibe message
if (hasVibeImpact) {
if (actualVibeChange > 0) {
impactMessage += "VIBES: +" + actualVibeChange + "% ";
} else {
impactMessage += "VIBES: " + actualVibeChange + "% ";
}
- }
- // Coherence impact message
+ } // Coherence impact message
if (hasCoherenceImpact) {
// Add newline before coherence if vibe message was added
if (hasVibeImpact) {
impactMessage += "\n";
@@ -3615,40 +3845,32 @@
}
addToTerminalLogWithEffect(impactMessage, function (impactCleanup) {
if (impactCleanup) {
impactCleanup();
- }
- // Mark impact messages as complete and check if we can continue
- activeBugInProgress = false;
- // Try to continue if the bug has been dealt with
+ } // Mark impact messages as complete and check if we can continue
+ activeBugInProgress = false; // Try to continue if the bug has been dealt with
if (bugInteractionComplete) {
continueCommandFlow();
}
});
} else {
// No meaningful changes to report, skip impact summary
- activeBugInProgress = false;
- // Try to continue if the bug has been dealt with
+ activeBugInProgress = false; // Try to continue if the bug has been dealt with
if (bugInteractionComplete) {
continueCommandFlow();
}
}
}
}
- }
- // Helper function to continue command flow after all messages and bug interaction
+ } // Helper function to continue command flow after all messages and bug interaction
function continueCommandFlow() {
completeCommand();
- }
- // Function to complete command processing
+ } // Function to complete command processing
function completeCommand() {
// Update terminal
- updateTerminal();
- // Clear busy flag
- gameState.isBusy = false;
- // Always recreate command prompts to update button states
- createCommandPrompts();
- // Let checkGameState handle the limit notification
+ updateTerminal(); // Clear busy flag
+ gameState.isBusy = false; // Always recreate command prompts to update button states
+ createCommandPrompts(); // Let checkGameState handle the limit notification
checkGameState();
}
}
function addToTerminalLogWithEffect(text, callback) {
@@ -3658,40 +3880,33 @@
var typingState = {
text: text,
position: 0,
currentText: ""
- };
- // KILL ALL PREVIOUS CURSORS - CRITICAL FIX
+ }; // KILL ALL PREVIOUS CURSORS - CRITICAL FIX
while (window.cursorIntervals.length > 0) {
var oldInterval = window.cursorIntervals.pop();
LK.clearInterval(oldInterval);
- }
- // Clean up any lingering cursors from previous lines with added checks
+ } // Clean up any lingering cursors from previous lines with added checks
if (gameState.terminal && gameState.terminal.log) {
for (var i = 0; i < gameState.terminal.log.length; i++) {
// Add null/undefined check before calling endsWith
if (gameState.terminal.log[i] && typeof gameState.terminal.log[i] === 'string' && gameState.terminal.log[i].endsWith("_")) {
gameState.terminal.log[i] = gameState.terminal.log[i].slice(0, -1);
}
}
- }
- // Add new entry to log
+ } // Add new entry to log
var logIndex = gameState.terminal.log.length;
- gameState.terminal.log.push("");
- // KILL THE REAL CURSOR PERMANENTLY if it exists
+ gameState.terminal.log.push(""); // KILL THE REAL CURSOR PERMANENTLY if it exists
if (gameState.cursor && gameState.cursor.parent) {
gameState.cursor.parent.removeChild(gameState.cursor);
gameState.cursor = null;
- }
- // Cursor character
+ } // Cursor character
var cursorChar = "_";
- var cursorVisible = true;
- // Setup cursor blink
+ var cursorVisible = true; // Setup cursor blink
var blinkInterval = LK.setInterval(function () {
// Only at end of typing
if (typingState.position >= typingState.text.length) {
- cursorVisible = !cursorVisible;
- // Toggle cursor visibility
+ cursorVisible = !cursorVisible; // Toggle cursor visibility
if (cursorVisible) {
// Show cursor
if (!gameState.terminal.log[logIndex].endsWith(cursorChar)) {
gameState.terminal.log[logIndex] += cursorChar;
@@ -3703,26 +3918,20 @@
}
}
updateTerminal();
}
- }, 500);
- // Track this interval for cleanup
+ }, 500); // Track this interval for cleanup
window.cursorIntervals.push(blinkInterval);
function type() {
if (typingState.position < typingState.text.length) {
// Get current character
- var currentChar = typingState.text[typingState.position];
- // Remove previous cursor if it exists
+ var currentChar = typingState.text[typingState.position]; // Remove previous cursor if it exists
if (typingState.currentText.endsWith(cursorChar)) {
typingState.currentText = typingState.currentText.slice(0, -1);
- }
- // Add character to current text plus cursor
- typingState.currentText += currentChar + cursorChar;
- // Update log entry
- gameState.terminal.log[logIndex] = typingState.currentText;
- // Update terminal display
- updateTerminal();
- // Continue typing
+ } // Add character to current text plus cursor
+ typingState.currentText += currentChar + cursorChar; // Update log entry
+ gameState.terminal.log[logIndex] = typingState.currentText; // Update terminal display
+ updateTerminal(); // Continue typing
typingState.position++;
LK.setTimeout(type, 50);
} else {
// Keep cursor visible at end
@@ -3733,10 +3942,9 @@
var index = window.cursorIntervals.indexOf(blinkInterval);
if (index > -1) {
window.cursorIntervals.splice(index, 1);
LK.clearInterval(blinkInterval);
- }
- // Remove final cursor if present
+ } // Remove final cursor if present
if (gameState.terminal.log[logIndex].endsWith(cursorChar)) {
gameState.terminal.log[logIndex] = gameState.terminal.log[logIndex].slice(0, -1);
updateTerminal();
}
@@ -3752,50 +3960,38 @@
for (var category in gameState.conceptCards) {
if (gameState.conceptCards[category]) {
conceptString += "#" + gameState.conceptCards[category].replace(/\s+/g, '') + " ";
}
- }
- // Get all log lines as an array
+ } // Get all log lines as an array
// Split into two lines
var statusLine1 = "DAY: " + gameState.day + "/" + gameState.maxDays + " | VIBES: " + gameState.vibePoints + "%" + " | COHERENCE: " + gameState.codeCoherence + "%" + " | BUGS: " + gameState.bugs + " | FEATURES: " + gameState.discoveredFeatures.length;
- var statusLine2 = conceptString;
- // Set as multiline text
+ var statusLine2 = conceptString; // Set as multiline text
gameState.statusLineText.setText(statusLine1 + "\n" + statusLine2);
- var allLines = gameState.terminal.log.join('\n\n').split('\n');
- // Calculate how many lines can fit in the visible area
- var maxVisibleLines = Math.floor(gameState.terminalMaxVisibleHeight / gameState.terminalLineHeight);
- // If we have more lines than can fit, trim from the top
+ var allLines = gameState.terminal.log.join('\n\n').split('\n'); // Calculate how many lines can fit in the visible area
+ var maxVisibleLines = Math.floor(gameState.terminalMaxVisibleHeight / gameState.terminalLineHeight); // If we have more lines than can fit, trim from the top
var visibleLines = allLines;
if (allLines.length > maxVisibleLines) {
visibleLines = allLines.slice(-maxVisibleLines);
- }
- // Update main terminal log text with only the visible lines
- gameState.logText.setText(visibleLines.join('\n'));
- // Adjust content container position - no need to scroll as we're trimming content
- gameState.terminalContentContainer.y = gameState.terminalBaseY;
- // Update cursor position
+ } // Update main terminal log text with only the visible lines
+ gameState.logText.setText(visibleLines.join('\n')); // Adjust content container position - no need to scroll as we're trimming content
+ gameState.terminalContentContainer.y = gameState.terminalBaseY; // Update cursor position
updateCursorPosition();
}
function updateCursorPosition() {
if (!gameState.cursor) {
return;
- }
- // Initialize cursor tracking if it doesn't exist
+ } // Initialize cursor tracking if it doesn't exist
if (!gameState.cursorTracking) {
gameState.cursorTracking = {
lineCount: 0
};
- }
- // Fixed constants
- var lineHeight = gameState.terminalLineHeight;
- // Get the last log entry for X position
+ } // Fixed constants
+ var lineHeight = gameState.terminalLineHeight; // Get the last log entry for X position
var lastLogEntry = gameState.terminal.log[gameState.terminal.log.length - 1] || "";
- var lastLine = lastLogEntry.split("\n").pop() || "";
- // Set X position - adjust the multiplier for character width
+ var lastLine = lastLogEntry.split("\n").pop() || ""; // Set X position - adjust the multiplier for character width
gameState.cursor.x = 50 + lastLine.length * 17 * TEXT_SIZE_MULTIPLIER; // Changed from 14 to 17
// Set Y position using our explicitly tracked line count (relative to content container)
- gameState.cursor.y = gameState.cursorTracking.lineCount * lineHeight;
- // Ensure cursor is visible by auto-scrolling if needed
+ gameState.cursor.y = gameState.cursorTracking.lineCount * lineHeight; // Ensure cursor is visible by auto-scrolling if needed
var contentHeight = gameState.logText.height;
if (contentHeight > gameState.terminalMaxVisibleHeight) {
var cursorY = gameState.cursorTracking.lineCount * lineHeight;
if (cursorY > gameState.terminalMaxVisibleHeight) {
@@ -3806,40 +4002,33 @@
}
}
function getAvailableWheelEffects() {
// Filter out bug-related effects if no bugs exist
- return [WHEEL_EFFECTS.BUG_RELEASE];
- /*return Object.values(WHEEL_EFFECTS).filter(function (effect) {
+ return Object.values(WHEEL_EFFECTS).filter(function (effect) {
if (gameState.bugs === 0) {
return !effect.name.includes("Bug");
}
return true;
});
- */
}
function createVibeBoostButton() {
- var button = new Container();
- // Calculate cost
+ var button = new Container(); // Calculate cost
var currentCost = gameState.vibeBoostCost + gameState.vibeBoostUses * 5;
- var buttonText = "VIBE BOOST[".concat(currentCost, "]");
- // Calculate width using same logic as other buttons
- var buttonWidth = calculateButtonWidth(buttonText);
- // Create background
+ var buttonText = "VIBE BOOST[".concat(currentCost, "]"); // Calculate width using same logic as other buttons
+ var buttonWidth = calculateButtonWidth(buttonText); // Create background
var bg = LK.getAsset('buttonBg', {
width: buttonWidth,
height: 100,
color: 0x4a86e8 // Different color to distinguish from other buttons
});
bg.anchor.set(0.5, 0.5);
- button.addChild(bg);
- // Create text
+ button.addChild(bg); // Create text
var textObj = new Text2(buttonText, {
size: 30 * TEXT_SIZE_MULTIPLIER,
fill: 0x00ff00
});
textObj.anchor.set(0.5, 0.5);
- button.addChild(textObj);
- // Set interactivity conditions
+ button.addChild(textObj); // Set interactivity conditions
var canAfford = gameState.vibePoints >= currentCost;
var notMaxCoherence = gameState.codeCoherence < 100;
var notBusy = !gameState.isBusy;
button.interactive = canAfford && notMaxCoherence && notBusy;
@@ -3866,34 +4055,30 @@
// Create wheel popup container
var wheelContainer = new Container();
wheelContainer.x = 2048 / 2;
wheelContainer.y = 2732 / 2;
- game.addChild(wheelContainer);
- // Create background - doubled size from 800x600 to 1600x1200
+ game.addChild(wheelContainer); // Create background - doubled size from 800x600 to 1600x1200
var bg = LK.getAsset('reviewBg', {
width: 1600,
height: 1200,
anchorX: 0.5,
anchorY: 0.5
});
- wheelContainer.addChild(bg);
- // Create title - adjust Y position for larger window
+ wheelContainer.addChild(bg); // Create title - adjust Y position for larger window
var title = new Text2("VIBE BOOST", {
size: 48 * TEXT_SIZE_MULTIPLIER,
fill: 0x000000
});
title.anchor.set(0.5, 0);
title.y = -500; // Adjusted from -250 for larger window
- wheelContainer.addChild(title);
- // Create spinning text - make it larger
+ wheelContainer.addChild(title); // Create spinning text - make it larger
var spinText = new Text2("Press SPIN to begin!", {
size: 48 * TEXT_SIZE_MULTIPLIER,
// Increased from 36
fill: 0x000000
});
spinText.anchor.set(0.5, 0.5);
- wheelContainer.addChild(spinText);
- // Create spin button - make it larger
+ wheelContainer.addChild(spinText); // Create spin button - make it larger
var spinButton = new Container();
var spinBg = LK.getAsset('buttonBg', {
width: 300,
// Increased from 200
@@ -3923,28 +4108,22 @@
}
function startWheelSpin(container, spinText, spinButton, cost) {
// Deduct cost
gameState.vibePoints -= cost;
- gameState.vibeBoostUses++;
- // Disable spin button
+ gameState.vibeBoostUses++; // Disable spin button
spinButton.interactive = false;
- spinButton.alpha = 0.5;
- // Play start sound
- LK.getSound('wheelstart').play();
- // Get available effects
- var effects = getAvailableWheelEffects();
- // Create a proper random selection based on weights
+ spinButton.alpha = 0.5; // Play start sound
+ LK.getSound('wheelstart').play(); // Get available effects
+ var effects = getAvailableWheelEffects(); // Create a proper random selection based on weights
var totalWeight = 0;
- var weightedEffects = [];
- // Calculate total weight and create array for selection
+ var weightedEffects = []; // Calculate total weight and create array for selection
for (var i = 0; i < effects.length; i++) {
totalWeight += effects[i].weight;
weightedEffects.push({
effect: effects[i],
weight: effects[i].weight
});
- }
- // Perform weighted random selection
+ } // Perform weighted random selection
var randomNum = Math.random() * totalWeight;
var currentWeight = 0;
var selectedEffect = null;
for (var i = 0; i < weightedEffects.length; i++) {
@@ -3952,43 +4131,34 @@
if (randomNum <= currentWeight) {
selectedEffect = weightedEffects[i].effect;
break;
}
- }
- // If you want equal chances instead of weighted, use this simpler code:
+ } // If you want equal chances instead of weighted, use this simpler code:
// var randomIndex = Math.floor(Math.random() * effects.length);
// var selectedEffect = effects[randomIndex];
// Play spinning sound
- LK.getSound('wheelspin').play();
- // Simulate spinning visually for a short time
+ LK.getSound('wheelspin').play(); // Simulate spinning visually for a short time
var spinCount = 0;
var currentIndex = 0;
var spinInterval = LK.setInterval(function () {
// Update display
- spinText.setText(effects[currentIndex].text);
- // Move to next option
- currentIndex = (currentIndex + 1) % effects.length;
- // Count spins and stop after enough visual spinning
+ spinText.setText(effects[currentIndex].text); // Move to next option
+ currentIndex = (currentIndex + 1) % effects.length; // Count spins and stop after enough visual spinning
spinCount++;
if (spinCount > 20) {
// Stop spinning
- LK.clearInterval(spinInterval);
- // Play stop sound
- LK.getSound('wheelstop').play();
- // Show the randomly selected outcome instead of using the current position
- spinText.setText(selectedEffect.text);
- // Execute selected effect
- var result = selectedEffect.execute();
- // Create explanation text with slight delay
+ LK.clearInterval(spinInterval); // Play stop sound
+ LK.getSound('wheelstop').play(); // Show the randomly selected outcome instead of using the current position
+ spinText.setText(selectedEffect.text); // Execute selected effect
+ var result = selectedEffect.execute(); // Create explanation text with slight delay
LK.setTimeout(function () {
var explanationText = new Text2(result, {
size: 36 * TEXT_SIZE_MULTIPLIER,
fill: 0x000000
});
explanationText.anchor.set(0.5, 0.5);
explanationText.y = 100; // Position below the outcome text
- container.addChild(explanationText);
- // Add close button after explanation appears
+ container.addChild(explanationText); // Add close button after explanation appears
var closeButton = new Container();
var closeBg = LK.getAsset('buttonBg', {
width: 300,
height: 120,
@@ -4008,10 +4178,9 @@
closeButton.scale.set(0.95);
};
closeButton.up = function () {
closeButton.scale.set(1);
- game.removeChild(container);
- // Only disable busy state if no bug party is active
+ game.removeChild(container); // Only disable busy state if no bug party is active
if (!gameState.activeBugParty) {
gameState.isBusy = false;
}
updateTerminal();
@@ -4035,38 +4204,25 @@
function startBugReleaseParty() {
// Skip if no bugs to release
if (gameState.bugs <= 0) {
return "No bugs to release!";
- }
- // Set up initial state
+ } // Set up initial state
gameState.bugParty = {
active: true,
totalBugs: gameState.bugs,
bugsRemaining: gameState.bugs,
bugsSquished: 0,
- timeRemaining: 20,
- // 20 seconds to squish bugs
+ timeRemaining: 10,
+ // 10 seconds to squish bugs
bugs: []
- };
- console.log("BUG PARTY: Started with", gameState.bugs, "bugs");
- console.log("BUG PARTY: Initial state", {
- active: gameState.bugParty.active,
- totalBugs: gameState.bugParty.totalBugs,
- bugsRemaining: gameState.bugParty.bugsRemaining,
- isBusy: gameState.isBusy,
- activeBugParty: gameState.activeBugParty
- });
- // Disable commands
+ }; // Disable commands
gameState.isBusy = true;
gameState.activeBugParty = true;
- updateCommandButtonsState(false);
- // Create a timer text using the existing terminal
- addToTerminalLogWithEffect("Bug party started! Time remaining: 20 seconds");
- // Create all bugs at once
+ updateCommandButtonsState(false); // Create a timer text using the existing terminal
+ addToTerminalLogWithEffect("Bug party started! Time remaining: 20 seconds"); // Create all bugs at once
for (var i = 0; i < gameState.bugs; i++) {
createBugWithExistingAssets(i);
- }
- // Start timer countdown (updates once per second)
+ } // Start timer countdown (updates once per second)
gameState.bugPartyTimerId = LK.setInterval(updateBugPartyTimer, 1000);
return "Released " + gameState.bugs + " bugs! Squish them quickly!";
}
function createBugWithExistingAssets(id) {
@@ -4078,72 +4234,58 @@
size: 60 * TEXT_SIZE_MULTIPLIER,
fill: 0xFF0000
});
bugText.anchor.set(0.5, 0.5);
- bugContainer.addChild(bugText);
- // Set up bug properties
+ bugContainer.addChild(bugText); // Set up bug properties
bugContainer.bugId = id;
bugContainer.isSquished = false;
bugContainer.velocityX = (Math.random() * 2 - 1) * 8;
bugContainer.velocityY = (Math.random() * 2 - 1) * 8;
- bugContainer.speed = 2 + Math.random() * 3;
- // Interactive for squishing
+ bugContainer.speed = 2 + Math.random() * 3; // Interactive for squishing
bugContainer.interactive = true;
bugContainer.down = function () {
// Prevent double handling
if (bugContainer.isSquished) {
return;
- }
- // Mark as squished immediately
- bugContainer.isSquished = true;
- // Visual effect
+ } // Mark as squished immediately
+ bugContainer.isSquished = true; // Visual effect
bugText.setText("*splat*");
LK.getSound('bugsquish').play();
- bugText.fill = 0x00FF00;
- // Update party state
+ bugText.fill = 0x00FF00; // Update party state
gameState.bugParty.bugsSquished++;
gameState.bugParty.bugsRemaining--;
- gameState.bugs = Math.max(0, gameState.bugs - 1);
- // Remove after animation
+ gameState.bugs = Math.max(0, gameState.bugs - 1); // Remove after animation
LK.setTimeout(function () {
if (bugContainer.parent) {
bugContainer.parent.removeChild(bugContainer);
- }
- // Remove from tracking array
+ } // Remove from tracking array
var index = gameState.bugParty.bugs.indexOf(bugContainer);
if (index !== -1) {
gameState.bugParty.bugs.splice(index, 1);
- }
- // Check if all bugs are squished
+ } // Check if all bugs are squished
checkBugPartyEnd();
}, 800);
- };
- // Position randomly
+ }; // Position randomly
bugContainer.x = 100 + Math.random() * (2048 - 200);
- bugContainer.y = 100 + Math.random() * (2732 - 200);
- // Add to game and tracking
+ bugContainer.y = 100 + Math.random() * (2732 - 200); // Add to game and tracking
game.addChild(bugContainer);
- gameState.bugParty.bugs.push(bugContainer);
- // Create update interval for this bug
+ gameState.bugParty.bugs.push(bugContainer); // Create update interval for this bug
bugContainer.updateInterval = LK.setInterval(function () {
// Stop updating if squished or party ended
if (!gameState.bugParty || !gameState.bugParty.active || bugContainer.isSquished) {
LK.clearInterval(bugContainer.updateInterval);
return;
- }
- // Movement
+ } // Movement
bugContainer.x += bugContainer.velocityX * bugContainer.speed;
- bugContainer.y += bugContainer.velocityY * bugContainer.speed;
- // Bounce off edges
+ bugContainer.y += bugContainer.velocityY * bugContainer.speed; // Bounce off edges
if (bugContainer.x < 50 || bugContainer.x > 2048 - 50) {
- bugContainer.velocityX *= -1;
- bugContainer.speed *= 1.1;
+ bugContainer.velocityX *= -1; // Increase speed slightly but cap at maximum
+ bugContainer.speed = Math.min(5, bugContainer.speed * 1.05);
}
if (bugContainer.y < 50 || bugContainer.y > 2732 - 50) {
- bugContainer.velocityY *= -1;
- bugContainer.speed *= 1.1;
- }
- // Random direction changes
+ bugContainer.velocityY *= -1; // Increase speed slightly but cap at maximum
+ bugContainer.speed = Math.min(5, bugContainer.speed * 1.05);
+ } // Random direction changes
if (Math.random() < 0.02) {
bugContainer.velocityX = (Math.random() * 2 - 1) * 4;
bugContainer.velocityY = (Math.random() * 2 - 1) * 4;
}
@@ -4156,16 +4298,13 @@
LK.clearInterval(gameState.bugPartyTimerId);
gameState.bugPartyTimerId = null;
}
return;
- }
- // Decrement time
- gameState.bugParty.timeRemaining--;
- // Update the terminal every 5 seconds
+ } // Decrement time
+ gameState.bugParty.timeRemaining--; // Update the terminal every 5 seconds
if (gameState.bugParty.timeRemaining % 5 === 0 || gameState.bugParty.timeRemaining <= 3) {
addToTerminalLogWithEffect("Time remaining: " + gameState.bugParty.timeRemaining + " seconds");
- }
- // Check if time's up
+ } // Check if time's up
if (gameState.bugParty.timeRemaining <= 0) {
endBugParty();
}
}
@@ -4177,56 +4316,55 @@
function endBugParty() {
// Skip if already ended
if (!gameState.bugParty || !gameState.bugParty.active) {
return;
- }
- // Set inactive immediately
- gameState.bugParty.active = false;
- // Clear timer interval
+ } // Set inactive immediately
+ gameState.bugParty.active = false; // Clear timer interval
if (gameState.bugPartyTimerId) {
LK.clearInterval(gameState.bugPartyTimerId);
gameState.bugPartyTimerId = null;
- }
- // Handle any remaining bugs
- var remainingBugs = 0;
- // Clean up all bugs
+ } // For each bug:
+ // 1. Clear its update interval
+ // 2. DISABLE INTERACTIVITY before removing
for (var i = gameState.bugParty.bugs.length - 1; i >= 0; i--) {
- var bug = gameState.bugParty.bugs[i];
- // Clear the update interval
+ var bug = gameState.bugParty.bugs[i]; // Clear the update interval
if (bug.updateInterval) {
LK.clearInterval(bug.updateInterval);
+ } // IMPORTANT: Disable interactivity to prevent clicks after party ends
+ bug.interactive = false; // Remove from display if not already squished
+ if (!bug.isSquished && bug.parent) {
+ bug.parent.removeChild(bug);
}
- // If not already squished, count as escaped
- if (!bug.isSquished) {
- remainingBugs++;
- // Remove from display
- if (bug.parent) {
- bug.parent.removeChild(bug);
- }
- }
- // Remove from array
- gameState.bugParty.bugs.splice(i, 1);
- }
- // Apply small code coherence penalty for any bugs that escaped
- if (remainingBugs > 0) {
- gameState.codeCoherence = Math.max(0, gameState.codeCoherence - remainingBugs);
- }
- // Show results
+ } // Show results
var squished = gameState.bugParty.bugsSquished;
- var total = gameState.bugParty.totalBugs;
- // Final message with results
+ var total = gameState.bugParty.totalBugs; // Store bugs reference before nulling the party
+ var bugsToRemove = gameState.bugParty.bugs.slice(); // Final message with results
addToTerminalLogWithEffect("Bug party complete! You squished ".concat(squished, " out of ").concat(total, " bugs!"), function () {
// Re-enable game
gameState.isBusy = false;
- gameState.activeBugParty = false;
- // Force recreate command buttons
+ gameState.activeBugParty = false; // Force recreate command buttons
if (gameState.promptContainer && gameState.promptContainer.parent) {
game.removeChild(gameState.promptContainer);
}
gameState.promptContainer = null;
createCommandPrompts();
- updateCommandButtonsState(true);
- // Clear the bug party data
+ updateCommandButtonsState(true); // NOW remove any remaining bugs (after delay to ensure visual feedback completes)
+ LK.setTimeout(function () {
+ var _iterator = _createForOfIteratorHelper(bugsToRemove),
+ _step;
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var bug = _step.value;
+ if (bug && bug.parent) {
+ bug.parent.removeChild(bug);
+ }
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+ }, 1000); // FINALLY clear the bug party data - after all bugs are handled
gameState.bugParty = null;
});
}
function resetGameProgress() {
@@ -4239,12 +4377,10 @@
gameplay: calculateGameplayScore(),
technical: calculateTechnicalScore(),
innovation: calculateInnovationScore(),
vibe: calculateVibeScore()
- };
- // Generate a game name instead of using the concepts directly
- var gameName = generateGameName();
- // Generate full review with all sections
+ }; // Generate a game name instead of using the concepts directly
+ var gameName = generateGameName(); // Generate full review with all sections
var review = {
title: generateTitle(),
// This still generates concept text but will be skipped in display
gameName: gameName,
@@ -4262,16 +4398,14 @@
userReviews: generateUserReviews(),
steamSnippets: generateSteamSnippets()
};
return formatReview(review);
-}
-// Score calculators
+} // Score calculators
function calculateGraphicsScore() {
var score = 5; // Reduced from 7 to 5
var _gameState$conceptCar = gameState.conceptCards,
visual = _gameState$conceptCar.visual,
- platform = _gameState$conceptCar.platform;
- // Visual style impacts
+ platform = _gameState$conceptCar.platform; // Visual style impacts
var visualImpacts = {
'ASCII': -1,
'Pixel Art': 1,
'Realistic': 2,
@@ -4280,10 +4414,9 @@
'Hand-drawn': 2,
'PowerPoint': -2,
'Demake': -1,
'Voxel': 1
- };
- // Platform impacts
+ }; // Platform impacts
var platformImpacts = {
'VR': 2,
'Console': 1,
'PC': 1,
@@ -4292,19 +4425,16 @@
'Smart Watch': -2,
'Web Browser': -1,
'Blockchain': -1,
'Metaverse': 1
- };
- // Apply modifiers
+ }; // Apply modifiers
if (visual && visualImpacts[visual]) {
score += visualImpacts[visual];
}
if (platform && platformImpacts[platform]) {
score += platformImpacts[platform];
- }
- // Coherence impact - unchanged but effectively more impactful with lower base
- score += Math.floor((gameState.codeCoherence - 50) / 20);
- // 2. INCREASE PENALTY IMPACT
+ } // Coherence impact - unchanged but effectively more impactful with lower base
+ score += Math.floor((gameState.codeCoherence - 50) / 20); // 2. INCREASE PENALTY IMPACT
// Bug impact increased - divide by 1 instead of 2
score -= Math.floor(gameState.bugs);
return Math.min(10, Math.max(1, score));
}
@@ -4312,10 +4442,9 @@
var score = 5; // Reduced from 7 to 5
var _gameState$conceptCar2 = gameState.conceptCards,
mechanic = _gameState$conceptCar2.mechanic,
genre = _gameState$conceptCar2.genre,
- platform = _gameState$conceptCar2.platform;
- // Mechanic impacts
+ platform = _gameState$conceptCar2.platform; // Mechanic impacts
var mechanicImpacts = {
'Gacha': 1,
'Physics-based': 2,
'Deckbuilding': 1,
@@ -4324,10 +4453,9 @@
'Dungeon Crawler': 1,
'Roguelike': 2,
'Turn-Based': 1,
'Tower Defense': 1
- };
- // Genre impacts
+ }; // Genre impacts
var genreImpacts = {
'Horror': 1,
'Dating Sim': 0,
'RPG': 2,
@@ -4336,31 +4464,26 @@
'Idle Clicker': -1,
'Open World': 2,
'Casual': 0,
'Shooter': 1
- };
- // Apply modifiers
+ }; // Apply modifiers
if (mechanic && mechanicImpacts[mechanic]) {
score += mechanicImpacts[mechanic];
}
if (genre && genreImpacts[genre]) {
score += genreImpacts[genre];
- }
- // Coherence impact - unchanged
- score += Math.floor((gameState.codeCoherence - 50) / 25);
- // 2. INCREASE PENALTY IMPACT
+ } // Coherence impact - unchanged
+ score += Math.floor((gameState.codeCoherence - 50) / 25); // 2. INCREASE PENALTY IMPACT
// Bug impact increased - divide by 1.5 instead of 3
score -= Math.floor(gameState.bugs / 1.5);
return Math.min(10, Math.max(1, score));
}
function calculateTechnicalScore() {
var score = 5; // Reduced from 8 to 5
// Coherence impact - unchanged but more impactful with lower base
- score += Math.floor((gameState.codeCoherence - 50) / 10);
- // 2. INCREASE PENALTY IMPACT
+ score += Math.floor((gameState.codeCoherence - 50) / 10); // 2. INCREASE PENALTY IMPACT
// Bugs have even more major impact - 1.5x multiplier
- score -= Math.floor(gameState.bugs * 1.5);
- // Platform complexity impacts
+ score -= Math.floor(gameState.bugs * 1.5); // Platform complexity impacts
var platform = gameState.conceptCards.platform;
var platformComplexity = {
'VR': -2,
'Blockchain': -3,
@@ -4378,12 +4501,10 @@
return Math.min(10, Math.max(1, score));
}
function calculateInnovationScore() {
var score = 4; // Reduced from 6 to 4
- var concepts = gameState.conceptCards;
- // Enhanced compatibility scoring
- var uniquenessFactor = 0;
- // Check for particularly innovative combinations - INCREASED IMPACT
+ var concepts = gameState.conceptCards; // Enhanced compatibility scoring
+ var uniquenessFactor = 0; // Check for particularly innovative combinations - INCREASED IMPACT
if (concepts.platform === 'VR' && concepts.visual === 'ASCII') {
score += 4; // Increased from 3
}
if (concepts.platform === 'Smart Fridge' && concepts.genre === 'Horror') {
@@ -4393,30 +4514,27 @@
score += 4; // Increased from 3
}
if (concepts.visual === 'PowerPoint' && concepts.genre === 'Battle Royale') {
score += 4; // Increased from 3
- }
- // NEW: Check for terrible combinations
+ } // NEW: Check for terrible combinations
if (concepts.platform === 'Smart Watch' && concepts.genre === 'Open World') {
score -= 2; // Penalty for illogical combination
}
if (concepts.platform === 'VR' && concepts.visual === 'PowerPoint') {
score -= 1; // Penalty for nauseating combination
}
if (concepts.platform === 'Blockchain' && concepts.mechanic === 'Physics-based') {
score -= 2; // Penalty for technically contradictory combination
- }
- // NEW: More nuanced combinations
+ } // NEW: More nuanced combinations
if (concepts.platform === 'Mobile' && concepts.genre === 'Casual') {
score += 1; // Good fit for platform
}
if (concepts.platform === 'PC' && concepts.genre === 'RPG') {
score += 1; // Classic good combination
}
if (concepts.platform === 'Smart Watch' && concepts.genre === 'Idle Clicker') {
score += 2; // Perfect for platform limitations
- }
- // General uniqueness checks
+ } // General uniqueness checks
if (concepts.platform === 'Smart Fridge' || concepts.platform === 'Smart Watch') {
uniquenessFactor += 1;
}
if (concepts.visual === 'ASCII' || concepts.visual === 'PowerPoint') {
@@ -4424,19 +4542,17 @@
}
if (concepts.mechanic === 'Gacha' && concepts.genre === 'Horror') {
uniquenessFactor += 2;
}
- score += uniquenessFactor;
- // Vibe points boost innovation
+ score += uniquenessFactor; // Vibe points boost innovation
score += Math.floor((gameState.vibePoints - 50) / 20);
return Math.min(10, Math.max(1, score));
}
function calculateVibeScore() {
// Heavily influenced by vibe points
var score = Math.floor(gameState.vibePoints / 12); // Reduced impact from /10 to /12
// Coherence adds smaller bonus
- score += Math.floor((gameState.codeCoherence - 50) / 20);
- // Bugs more significantly reduce vibe - divide by 2 instead of 4
+ score += Math.floor((gameState.codeCoherence - 50) / 20); // Bugs more significantly reduce vibe - divide by 2 instead of 4
score -= Math.floor(gameState.bugs / 2);
return Math.min(10, Math.max(1, score));
}
function generateGameName() {
@@ -4445,10 +4561,9 @@
var platform = concepts.platform;
var visual = concepts.visual;
var genre = concepts.genre;
var mechanic = concepts.mechanic;
- var feature = concepts.feature;
- // Specific parody names for platform/genre combinations
+ var feature = concepts.feature; // Specific parody names for platform/genre combinations
var specificParodies = (_specificParodies = {
// Smart Fridge combinations
'Smart Fridge_RPG': ["The Colder Scrolls", "Chrono Fridger", "Final Fridge Fantasy", "Mass Defrost", "Dragon Refrigerator", "Fridge Story", "The Witcher 3: Wild Lunch", "The Legend of Kelvin", "Ice Emblem", "Biofrost"],
'Smart Fridge_Horror': ["Resident Refrigerator", "Silent Chill", "Five Nights at Fridgey's", "Dead Defrost", "Alien: Icebox", "Amnesia: The Dark Freezer", "Outlast Leftovers", "Until Spoil", "Cold Hill", "Defrosternaut"],
@@ -4498,10 +4613,9 @@
'ASCII_Dating Sim': ["Terminal Romance", "ASCII After", "Dream Terminal", "/bin/love", "sudo apt-get install romance", "Character Sheet Romance", "Command Line Connections", "Bash & Romance", "Text Mode Heart", "Prompt://Love"],
'ASCII_Battle Royale': ["Terminal Conflict", "ASCII Arena", "Last Character Standing", "Command-Line Carnage", "Text Royale", "sudo battle-royale", "Bash Battlefield", "Monospace Mayhem", "CRT Conflict", "Shell Showdown"],
// PC combinations
'PC_Horror': ["System32.Horror", "Blue Screen of Death", "Alt-Tab Terror", "Fatal Error", "Task Manager's Nightmare", "C:/Program Files/Fear", "CMOS Corruption", "Motherboard Malevolence", "Fatal Boot Error", "Registry Corruption"]
- }, _defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_specificParodies, "PC_Dating Sim", ["Alt+Tab Heart", "System Preferences: Romance", "Runtime Exception: Love", "My Documents/Love Letters", "Registry Key to My Heart", "Task Manager's Heart", "Control Panel Romance", "Device Manager Dating", "Startup Romance", "Windows Update of My Heart"]), 'Physics-based_RPG', ["Trajectory Quest", "Momentum Saga", "Inertial Fantasy", "Gravity's Edge", "Parabolic Adventure", "Vector Force Chronicles", "Kinetic Quest", "Friction Fantasy", "Quantum Realms", "Momentum & Magic"]), 'Physics-based_Horror', ["Gravitational Dread", "Momentum Terror", "Quantum Nightmares", "Fluid Dynamics of Fear", "Terminal Velocity", "Half-Life: Alyx's Nightmare", "Event Horizon", "Entropic Horror", "Conservation of Screams", "Schrรถdinger's Nightmare"]), 'Console_Horror', ["DualShock Horror", "Controller Drift Nightmare", "Haptic Feedback Fear", "Memory Card Corruption", "XScare Series", "PlayScaretion", "SwitchFright", "GameStation Terror", "Analog Horror", "Thumbstick Dread"]), 'Console_Dating Sim', ["DualShock of Love", "Analog Heart", "L1 + R1 of Love", "Memory Card Memories", "Haptic Heartbeat", "First Party Romance", "Exclusive Relationship", "Cross-Platform Love", "Joy-Connection", "Player Two Enter"]), 'Hand-drawn_Battle Royale', ["Sketch Royale", "Ink Arena", "Brushstroke Battlefield", "Canvas Combat", "Watercolor Warfare", "Charcoal Champions", "Pencil Lead Last Stand", "Illustration Elimination", "Doodle Deathmatch", "Drawn & Danger"]), 'Hand-drawn_RPG', ["Sketchbook Quest", "Ink & Incantations", "Charcoal Champions", "Graphite Grind", "Pencil Lead Legends", "Watercolor Wanderers", "Brushstroke Battles", "Illustrated Adventure", "Doodle Dungeons", "Pen & Paper & Pixels"]), 'Roguelike_Dating Sim', ["Binding of Hearts", "Enter the Love Dungeon", "FTL: Faster Than Love", "Hades Date", "Slay the Heart", "Dead Date Redemption", "Love & Procedural Generation", "Relationship Rogue", "Into the Breach of Love", "Risk of Romance 2"]), 'Roguelike_Horror', ["Binding of Terror", "Enter the Fear Dungeon", "Dead Fear Redemption", "FTL: Faster Than Light Terrors", "Hades Nightmare", "Slay the Beast", "Lovecraft's Rogue", "Into the Scream", "Risk of Horror 2", "Curse of the Dead Gods"]), "Blockchain_Shooter", ["CryptoShock Infinite", "Uncharted: Blockchain's Fortune", "Medal of Ethereum", "Proof-of-Stake Fortress 2", "Gas Fees of War", "Unreal Blockchain", "Block Fortress", "Smart Contract Battlegrounds", "DeFi-nite", "Solana 4 Dead"]), _defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_specificParodies, 'Blockchain_Horror', ["Silent Blockchain", "Distributed Ledger of Evil", "Hash Function Horror", "Proof-of-Stake Hill", "Gas Fee by Daylight", "Alien: Blockchain Isolation", "Consensus Mechanism Evil", "Smart Contract Horror", "Nodes of Fear", "Mining Nightmares"]), "Smart Watch_Dating Sim", ["Heartbeat Monitor", "Swipe Right on Wrist", "Tiny Screen Romance", "Wrist Notification of Love", "BPM: Beats Per Match", "Haptic Heart", "Step Counter Sweethearts", "Wearable Love Story", "Battery Life of Love", "Taptic Romance"]), 'Smart Watch_Horror', ["Wrist Notification Terror", "Heart Rate Horror", "Battery Drain Dread", "Haptic Horrors", "Step Counter Stalker", "Taptic Terrors", "Time's Running Out", "Midnight Watch", "Digital Crown Nightmare", "Complications"]), 'Web Browser_Horror', ["404 Terror Not Found", "Cookie Monsters", "HTTP Horrors", "JavaScript Nightmares", "Cache Corruption", "DNS Demons", "SSL Screamers", "Browser History Haunting", "Dark Web", "Incognito Mode"]), 'Web Browser_Dating Sim', ["E-Romance Explorer", "Cookie Consent Hearts", "Hypertext Hearts", "Bookmark My Heart", "New Tab New Love", "Private Browsing Passion", "Add to Favorites", "Download Complete: Love", "Connection Secured", "HTTP Status 200: OK Cupid"]), 'Mobile_RPG', ["Tap Quest Heroes", "Swipe & Slash Saga", "Battery Drain Fantasy", "Notification RPG", "In-App Purchase Adventure", "Gacha Life", "Pocket Legend", "Touchscreen Tales", "Idle Heroes of Might", "AFK Arena of Time"]), 'Mobile_Battle Royale', ["Low Battery Royale", "One Touch One Kill", "Swipe to Survive", "Notification Battleground", "Mobile Data Warfare", "Auto-Rotate Arena", "Screen Time Showdown", "Tap Fire", "Airplane Mode Mayhem", "Battery Saver Battleground"]), 'AI Companions_RPG', ["Neural Network Fantasy", "Deep Learning Quest", "Machine Learning Legends", "Algorithm Adventure", "GPT Knights", "Transformer Tales", "Artificial Quests", "Synthetic Saga", "Turing Test Trials", "LSTM Legends"]), 'NFT Integration_RPG', ["Fungible Fantasy", "Tokenized Tales", "Digital Asset Dungeons", "Blockchain Battles", "Wallet Warriors", "Gas Fee Quest", "Smart Contract Saga", "Minting Monsters", "Ledger Legends", "Crypto Crusaders"]), 'Voxel_Horror', ["Cubic Fears", "Block Terror", "Voxel Nightmares", "Cubism of Death", "Blocky Horrors", "Six-Sided Screams", "Pixel Depth Frights", "Cubic Isolation", "Volumetric Void", "Blocktober Horror"]), _defineProperty2(_defineProperty2(_specificParodies, 'Voxel_RPG', ["Cube Quest", "Block Saga", "Six-Sided Story", "Voxel Ventures", "Cubic Characters", "Blockcraft Legends", "Volumetric Valkyries", "Cube Crawler", "Voxel Vanguard", "Block & Blade"]), 'Low-poly_Horror', ["Faceted Fears", "Vertex Horror", "Triangle Terror", "Low-Resolution Nightmares", "Polygon Panic", "Facet Fright", "Primitive Horror", "Wireframe Worries", "Unsmoothed Unholy", "Jagged Edge"]));
- // Check for specific combinations first
+ }, _defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_specificParodies, "PC_Dating Sim", ["Alt+Tab Heart", "System Preferences: Romance", "Runtime Exception: Love", "My Documents/Love Letters", "Registry Key to My Heart", "Task Manager's Heart", "Control Panel Romance", "Device Manager Dating", "Startup Romance", "Windows Update of My Heart"]), 'Physics-based_RPG', ["Trajectory Quest", "Momentum Saga", "Inertial Fantasy", "Gravity's Edge", "Parabolic Adventure", "Vector Force Chronicles", "Kinetic Quest", "Friction Fantasy", "Quantum Realms", "Momentum & Magic"]), 'Physics-based_Horror', ["Gravitational Dread", "Momentum Terror", "Quantum Nightmares", "Fluid Dynamics of Fear", "Terminal Velocity", "Half-Life: Alyx's Nightmare", "Event Horizon", "Entropic Horror", "Conservation of Screams", "Schrรถdinger's Nightmare"]), 'Console_Horror', ["DualShock Horror", "Controller Drift Nightmare", "Haptic Feedback Fear", "Memory Card Corruption", "XScare Series", "PlayScaretion", "SwitchFright", "GameStation Terror", "Analog Horror", "Thumbstick Dread"]), 'Console_Dating Sim', ["DualShock of Love", "Analog Heart", "L1 + R1 of Love", "Memory Card Memories", "Haptic Heartbeat", "First Party Romance", "Exclusive Relationship", "Cross-Platform Love", "Joy-Connection", "Player Two Enter"]), 'Hand-drawn_Battle Royale', ["Sketch Royale", "Ink Arena", "Brushstroke Battlefield", "Canvas Combat", "Watercolor Warfare", "Charcoal Champions", "Pencil Lead Last Stand", "Illustration Elimination", "Doodle Deathmatch", "Drawn & Danger"]), 'Hand-drawn_RPG', ["Sketchbook Quest", "Ink & Incantations", "Charcoal Champions", "Graphite Grind", "Pencil Lead Legends", "Watercolor Wanderers", "Brushstroke Battles", "Illustrated Adventure", "Doodle Dungeons", "Pen & Paper & Pixels"]), 'Roguelike_Dating Sim', ["Binding of Hearts", "Enter the Love Dungeon", "FTL: Faster Than Love", "Hades Date", "Slay the Heart", "Dead Date Redemption", "Love & Procedural Generation", "Relationship Rogue", "Into the Breach of Love", "Risk of Romance 2"]), 'Roguelike_Horror', ["Binding of Terror", "Enter the Fear Dungeon", "Dead Fear Redemption", "FTL: Faster Than Light Terrors", "Hades Nightmare", "Slay the Beast", "Lovecraft's Rogue", "Into the Scream", "Risk of Horror 2", "Curse of the Dead Gods"]), "Blockchain_Shooter", ["CryptoShock Infinite", "Uncharted: Blockchain's Fortune", "Medal of Ethereum", "Proof-of-Stake Fortress 2", "Gas Fees of War", "Unreal Blockchain", "Block Fortress", "Smart Contract Battlegrounds", "DeFi-nite", "Solana 4 Dead"]), _defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_defineProperty2(_specificParodies, 'Blockchain_Horror', ["Silent Blockchain", "Distributed Ledger of Evil", "Hash Function Horror", "Proof-of-Stake Hill", "Gas Fee by Daylight", "Alien: Blockchain Isolation", "Consensus Mechanism Evil", "Smart Contract Horror", "Nodes of Fear", "Mining Nightmares"]), "Smart Watch_Dating Sim", ["Heartbeat Monitor", "Swipe Right on Wrist", "Tiny Screen Romance", "Wrist Notification of Love", "BPM: Beats Per Match", "Haptic Heart", "Step Counter Sweethearts", "Wearable Love Story", "Battery Life of Love", "Taptic Romance"]), 'Smart Watch_Horror', ["Wrist Notification Terror", "Heart Rate Horror", "Battery Drain Dread", "Haptic Horrors", "Step Counter Stalker", "Taptic Terrors", "Time's Running Out", "Midnight Watch", "Digital Crown Nightmare", "Complications"]), 'Web Browser_Horror', ["404 Terror Not Found", "Cookie Monsters", "HTTP Horrors", "JavaScript Nightmares", "Cache Corruption", "DNS Demons", "SSL Screamers", "Browser History Haunting", "Dark Web", "Incognito Mode"]), 'Web Browser_Dating Sim', ["E-Romance Explorer", "Cookie Consent Hearts", "Hypertext Hearts", "Bookmark My Heart", "New Tab New Love", "Private Browsing Passion", "Add to Favorites", "Download Complete: Love", "Connection Secured", "HTTP Status 200: OK Cupid"]), 'Mobile_RPG', ["Tap Quest Heroes", "Swipe & Slash Saga", "Battery Drain Fantasy", "Notification RPG", "In-App Purchase Adventure", "Gacha Life", "Pocket Legend", "Touchscreen Tales", "Idle Heroes of Might", "AFK Arena of Time"]), 'Mobile_Battle Royale', ["Low Battery Royale", "One Touch One Kill", "Swipe to Survive", "Notification Battleground", "Mobile Data Warfare", "Auto-Rotate Arena", "Screen Time Showdown", "Tap Fire", "Airplane Mode Mayhem", "Battery Saver Battleground"]), 'AI Companions_RPG', ["Neural Network Fantasy", "Deep Learning Quest", "Machine Learning Legends", "Algorithm Adventure", "GPT Knights", "Transformer Tales", "Artificial Quests", "Synthetic Saga", "Turing Test Trials", "LSTM Legends"]), 'NFT Integration_RPG', ["Fungible Fantasy", "Tokenized Tales", "Digital Asset Dungeons", "Blockchain Battles", "Wallet Warriors", "Gas Fee Quest", "Smart Contract Saga", "Minting Monsters", "Ledger Legends", "Crypto Crusaders"]), 'Voxel_Horror', ["Cubic Fears", "Block Terror", "Voxel Nightmares", "Cubism of Death", "Blocky Horrors", "Six-Sided Screams", "Pixel Depth Frights", "Cubic Isolation", "Volumetric Void", "Blocktober Horror"]), _defineProperty2(_defineProperty2(_specificParodies, 'Voxel_RPG', ["Cube Quest", "Block Saga", "Six-Sided Story", "Voxel Ventures", "Cubic Characters", "Blockcraft Legends", "Volumetric Valkyries", "Cube Crawler", "Voxel Vanguard", "Block & Blade"]), 'Low-poly_Horror', ["Faceted Fears", "Vertex Horror", "Triangle Terror", "Low-Resolution Nightmares", "Polygon Panic", "Facet Fright", "Primitive Horror", "Wireframe Worries", "Unsmoothed Unholy", "Jagged Edge"])); // Check for specific combinations first
var specificKey = '';
if (platform && genre) {
specificKey = platform + '_' + genre;
if (specificParodies[specificKey]) {
@@ -4512,10 +4626,9 @@
specificKey = visual + '_' + genre;
if (specificParodies[specificKey]) {
return specificParodies[specificKey][Math.floor(Math.random() * specificParodies[specificKey].length)];
}
- }
- // If no specific parody found, use the placeholder system as fallback
+ } // If no specific parody found, use the placeholder system as fallback
// Collections of name templates by genre
var genreNames = {
'Horror': ["Five Nights at {platform}", "Resident {visual}", "Silent {mechanic}", "Dead {platform}", "Alien: {feature}", "{platform} Evil", "The {visual} of Us", "Dying {mechanic}", "Until {visual}", "Outlast {feature}", "{mechanic} Park", "The {platform} Dark", "Amnesia: The {visual} Descent", "{mechanic} Isolation", "Little {platform}s", "The {visual} Medium", "{mechanic} May Cry", "Blair {feature} Project"],
'Dating Sim': ["Love Plus {platform}", "{visual} Academy", "Dream {mechanic}", "My {platform} Romance", "{feature} Story", "Doki Doki {visual} Club", "Hatoful {mechanic}", "{platform} Boyfriend", "Heart of {feature}", "{visual} Sweetheart", "True {mechanic}", "Starlight {platform}", "Summer {visual}", "{mechanic} of Love", "Sweet {platform} Kiss", "{feature} Connection"],
@@ -4525,43 +4638,35 @@
'Idle Clicker': ["Cookie {platform}", "{visual} Capitalist", "Clicker {mechanic}", "Idle {feature}", "{platform} Tycoon", "Tap {visual}", "Incremental {mechanic}", "{platform} Mine", "Factory {visual}", "Candy {mechanic} Saga", "Exponential {feature}", "{platform} Billionaire", "Endless {visual}", "Infinity {mechanic}", "Progress {feature}", "Tapper {platform}"],
'Open World': ["Grand Theft {platform}", "Red Dead {visual}", "{mechanic} Creed", "The Legend of {feature}", "Ghost of {platform}", "Horizon: {visual} Dawn", "Far {mechanic}", "Watch {feature}", "Just {platform}", "Saints {visual}", "Yakuza: Like a {mechanic}", "Mafia: {feature} City", "Infamous: {platform} Son", "Dying {visual}", "Spider-{mechanic}", "Breath of the {feature}", "Skyrim: {platform} Edition"],
'Casual': ["Angry {platform}s", "Candy {visual}", "Fruit {mechanic}", "{feature} Crush Saga", "Farm {platform}", "Tiny {visual}", "Happy {mechanic}", "Plant vs {feature}", "{platform} Valley", "Hidden {visual}", "Mystery {mechanic} Theater", "{feature} Pop", "Garden {platform}", "Animal {visual}", "Pocket {mechanic}", "{feature} Paradise"],
'Shooter': ["Call of {platform}", "{visual}field", "Counter-{mechanic}", "Team {feature} 2", "Half-{platform}", "Doom {visual}", "Halo: {mechanic} Evolved", "Bio{feature}", "{platform}shock", "Metal {visual}", "Gears of {mechanic}", "Rainbow Six: {feature}", "Border{platform}s", "Destiny {visual}", "Overwatch {mechanic}", "Valorant {feature}"]
- };
- // Additional name templates based on platform
+ }; // Additional name templates based on platform
var platformNames = {
'VR': ["Beat {genre}", "Super{genre} VR", "Job {visual}ator", "Half-Life: {genre}", "I Expect You To {visual}", "VR{genre}", "The {genre} Lab", "Virtual {mechanic} Simulator"],
'Smart Fridge': ["Fridge {genre}", "Cool {visual}", "Chilled {mechanic}", "Frost{genre}", "Ice Cold {feature}", "Refrigerated {visual}", "Freezer {mechanic}", "Kitchen {genre} Simulator"],
'Blockchain': ["Crypto{genre}", "NFT {visual}", "Block{mechanic}", "Chain {genre}", "Decentralized {feature}", "Ethereum {visual}", "Token {mechanic}", "Gas Fee {genre}"],
'Smart Watch': ["Wrist{genre}", "Time {visual}", "Watch{mechanic}", "Tiny {genre}", "Glance {feature}", "Tick Tock {visual}", "Nano{mechanic}", "Hand{genre}"]
- };
- // Visual style specific names
+ }; // Visual style specific names
var visualNames = {
'ASCII': ["Terminal {genre}", "Text {mechanic}", "Command {feature}", "Mono{genre}", "ASCII {mechanic}", "Code{feature}", "{genre}.exe", "Matrix {mechanic}"],
'PowerPoint': ["Slide {genre}", "Presentation {mechanic}", "Office {feature}", "PowerPoint {genre}", "Bullet {mechanic} Point", "Clipart {feature}", "Star Wipe {genre}", "Transition {mechanic}"]
- };
- // Name collections for specific genre-platform-mechanic combos
+ }; // Name collections for specific genre-platform-mechanic combos
var specialCombos = {
'VR_ASCII': ["The Matrix: ASCII Revolution", "Cyber{genre}", "Terminal Reality", "Text-Based {feature} Experience", "V.R.T.: Virtual Reality Terminal", "Code Vision", "Matrix Vision"],
'Smart Fridge_Horror': ["Cold Storage", "Frostbite {feature}", "Midnight Snack: {mechanic} Edition", "The Thing in my Fridge", "ICE SCREAM", "Defrost Nightmare", "The Cold Ones", "Chilling Presence"],
'Blockchain_Dating Sim': ["Crypto Crush", "Love Chain", "NFT Romance", "Token of my Affection", "Decentralized Hearts", "Smart Contract Love", "Blockchain Boyfriend", "Digital Asset Romance"],
'PowerPoint_Battle Royale': ["Slide or Die", "Last Presentation Standing", "Battle Deck", "PowerPoint PUBG", "Office Royale", "Transition Battleground", "99 Slides", "Star Wipe Survival"]
- };
- // Start building a list of possible names
- var possibleNames = [];
- // Add names from the genre collections first
+ }; // Start building a list of possible names
+ var possibleNames = []; // Add names from the genre collections first
if (genre && genreNames[genre]) {
possibleNames = possibleNames.concat(genreNames[genre]);
- }
- // Add platform-specific names
+ } // Add platform-specific names
if (platform && platformNames[platform]) {
possibleNames = possibleNames.concat(platformNames[platform]);
- }
- // Add visual style-specific names
+ } // Add visual style-specific names
if (visual && visualNames[visual]) {
possibleNames = possibleNames.concat(visualNames[visual]);
- }
- // Check for special combinations
+ } // Check for special combinations
var comboKey = '';
if (platform && genre) {
comboKey = platform + '_' + genre;
if (specialCombos[comboKey]) {
@@ -4572,23 +4677,19 @@
comboKey = platform + '_' + visual;
if (specialCombos[comboKey]) {
possibleNames = possibleNames.concat(specialCombos[comboKey]);
}
- }
- // If we still don't have names, add some generic fallbacks
+ } // If we still don't have names, add some generic fallbacks
if (possibleNames.length === 0) {
possibleNames = ["Super {platform} {genre}", "Amazing {visual} {mechanic}", "Fantastic {feature} {genre}", "Incredible {platform} {visual}", "Epic {mechanic} {feature}", "{platform} {genre} Simulator", "{visual} {mechanic} Adventure", "The Legend of {feature} {platform}"];
- }
- // Select a name template
- var nameTemplate = possibleNames[Math.floor(Math.random() * possibleNames.length)];
- // Replace placeholders with actual concepts
+ } // Select a name template
+ var nameTemplate = possibleNames[Math.floor(Math.random() * possibleNames.length)]; // Replace placeholders with actual concepts
var name = nameTemplate.replace('{platform}', platform || 'Game').replace('{visual}', visual || 'Adventure').replace('{genre}', genre || 'Action').replace('{mechanic}', mechanic || 'Play').replace('{feature}', feature || 'Plus');
return name;
}
function generateTitle() {
var concepts = gameState.conceptCards;
- var title = "";
- // Compile core concepts
+ var title = ""; // Compile core concepts
var coreFeatures = [concepts.platform, concepts.visual, concepts.genre, concepts.mechanic, concepts.feature].filter(Boolean);
title = coreFeatures.join(" ");
return title + "\n";
}
@@ -4606,10 +4707,9 @@
'Claymation': ["The claymation style brings a tactile quality to the game, complete with visible fingerprints that suggest either artistic authenticity or a crime scene. Possibly both.", "Characters move with that signature stop-motion jerkiness that's either charming or unsettling depending on your childhood experiences with Wallace and Gromit.", "The deliberate imperfections in the clay models create an unsettling organic quality, as if the digital world is somehow made of actual physical materials that could rot if left unattended."],
'Realistic': ["The realistic graphics sometimes cross into uncanny valley territory, creating characters who look almost human but whose dead eyes suggest they've seen the void between worlds.", "The photorealistic visuals create an immersive experience that occasionally makes players forget what reality they're in, which may or may not be the point.", "The high-fidelity graphics push hardware to its limits, raising the philosophical question of whether melting your GPU was part of the artistic vision."],
'Voxel': ["The voxel-based graphics create a world that feels simultaneously childlike and ominous, like a LEGO set assembled by someone with questionable intentions.", "Blocky characters and environments give the game a charm that cleverly masks how technically challenging proper curves would have been to implement.", "The cubist aesthetic makes everything look like it belongs in a universe where Minecraft won the console wars and all other visual styles were outlawed."],
'Demake': ["The deliberately downgraded aesthetic captures the essence of playing on hardware that wasn't quite up to the task, complete with authentic slowdown when more than three objects are on screen.", "The demake style implements visual constraints so convincingly that players report checking if their graphics card has somehow been replaced with a potato.", "The authentically degraded visuals inspire genuine nostalgia, making players long for a time when expectations were lower and imagination filled in the graphical gaps."]
- };
- // Platform-specific comments
+ }; // Platform-specific comments
var platformComments = {
'VR': ["The VR implementation creates an immersive experience that's both impressive and occasionally nauseating. Multiple players report developing 'VR legs' and losing their actual legs in the process.", "Moving through virtual space feels surprisingly natural, though the occasional clipping issues break immersion and sometimes the laws of physics.", "The game takes full advantage of virtual reality's possibilities while also embracing its limitations, like how most players will quit after 30 minutes because they feel like they're going to throw up."],
'Mobile': ["The mobile platform limitations are cleverly disguised as design choices, with menu buttons large enough to accommodate fingers of all sizes and intelligence levels.", "The game's performance on phones suggests either remarkable optimization skills or a dark pact with the silicon gods of battery life.", "Touch controls have been implemented with surprising precision, making them only moderately more frustrating than using actual buttons."],
'Console': ["The console version makes efficient use of controllers, requiring only minor finger contortions that physical therapists describe as 'probably not immediately damaging.'", "Load times have been optimized to be just short enough that players won't quite have time to make a sandwich but long enough to contemplate their life choices.", "The game pushes console hardware to its limits, occasionally causing fans to spin so loudly they've been mistaken for small aircraft."],
@@ -4622,10 +4722,9 @@
};
var _gameState$conceptCar3 = gameState.conceptCards,
visual = _gameState$conceptCar3.visual,
platform = _gameState$conceptCar3.platform;
- var review = "Graphics: ".concat(score, "/10\n");
- // Special case combinations - pick only one now
+ var review = "Graphics: ".concat(score, "/10\n"); // Special case combinations - pick only one now
if (visual === 'ASCII' && platform === 'VR') {
var options = ["ASCII art in VR is certainly... a choice. While most players reported immediate nausea from trying to parse text characters in 3D space, a small but vocal community calls it \"revolutionary\" and \"the Dark Souls of visual design.\" The flickering terminal aesthetic certainly enhances the horror elements, though distinguishing enemies from walls remains a challenging gameplay feature.", "The bold decision to render three-dimensional space with nothing but ASCII characters has created what medical professionals are now calling 'Terminal Vision Syndrome.' Players report seeing command prompts overlaid on reality after just 20 minutes of gameplay. Some have started dreaming in monospace font.", "Experiencing walls of text in virtual reality creates a peculiar type of motion sickness previously unknown to science. Yet somehow, a dedicated community has emerged claiming the 'textural purity' offers an unmatched immersive experience. We're not convinced they're not all suffering from Stockholm syndrome."];
review += options[Math.floor(Math.random() * options.length)] + " ";
} else if (visual === 'PowerPoint' && platform === 'VR') {
@@ -4641,24 +4740,21 @@
// Add ONE visual style comment if available
if (visual && visualComments[visual]) {
var options = visualComments[visual];
review += options[Math.floor(Math.random() * options.length)] + " ";
- }
- // Add ONE platform comment if available
+ } // Add ONE platform comment if available
if (platform && platformComments[platform]) {
var options = platformComments[platform];
review += options[Math.floor(Math.random() * options.length)] + " ";
}
- }
- // Add ONE coherence or bug comment if applicable, not both
+ } // Add ONE coherence or bug comment if applicable, not both
if (gameState.codeCoherence < 50 && Math.random() < 0.7) {
var lowCoherenceComments = ["The visual glitches are either artistic genius or concerning system failures - we're not entirely sure which. The 'wavy reality' effect seems less intentional and more like the rendering engine is having an existential crisis.", "Textures have developed the disturbing habit of occasionally swapping places, resulting in NPCs with brick faces and buildings with human skin. The developers insist this is 'dynamic environmental storytelling.'", "Visual elements randomly phase in and out of existence like quantum particles, which the marketing department has retroactively branded as 'Schrรถdinger rendering technology.'", "The game's graphics routinely bend in ways that suggest the rendering engine is questioning the nature of reality. Characters occasionally turn inside-out during cutscenes, which the developers claim is 'emotional expression through topological transformation.'", "Assets frequently forget which dimension they belong to, creating scenes where background elements casually stroll through foreground conversations. The patch notes insist this is an 'interactive storytelling breakthrough.'"];
review += lowCoherenceComments[Math.floor(Math.random() * lowCoherenceComments.length)] + " ";
} else if (gameState.bugs > 5 && Math.random() < 0.7) {
var highBugComments = ["The numerous visual bugs have been claimed as \"dynamic art features\" by the development team, who are now mysteriously all using the job title 'Accidental Art Director.'", "Character models occasionally contort into geometrically impossible shapes that mathematician M.C. Escher would find disturbing. These have been rebranded as 'surprise flexibility mechanics.'", "Visual elements frequently clip through each other in ways that defy not just game design but several laws of physics. The resulting Lovecraftian imagery could qualify the game for the horror genre regardless of its actual content.", "Z-fighting issues occur with such rhythmic consistency that players have set the flickering textures to music. The resulting community-created content has spawned three remix albums and a small festival.", "Lighting errors create such dramatic shadow effects that some scenes resemble expressionist German cinema from the 1920s. Critics can't agree if it's a bug or the most innovative visual direction in recent gaming history."];
review += highBugComments[Math.floor(Math.random() * highBugComments.length)] + " ";
- }
- // Apply smart truncation
+ } // Apply smart truncation
review = smartTruncateReview(review, 500) + "\n\n";
return review;
}
function generateGameplayReview(score) {
@@ -4672,10 +4768,9 @@
'Dungeon Crawler': ["The procedurally generated dungeons create endless unique experiences that somehow all start feeling exactly the same after about three hours.", "Level designs balance challenge and reward with the precision of a drunk tightrope walker who occasionally makes it across through sheer luck.", "The risk-reward system encourages players to push just one room further, a decision they consistently report regretting immediately thereafter."],
'Roguelike': ["The permadeath system teaches valuable lessons about loss, impermanence, and the human capacity for self-torture disguised as entertainment.", "Run-based progression creates a gameplay loop addictive enough that players report dreaming about 'just one more run' while actively in the middle of a run.", "Random elements ensure no two playthroughs are alike, though players will still blame the RNG rather than their skills for consistent failures."],
'Turn-Based': ["The turn-based combat system gives players unlimited time to make decisions they'll immediately regret once executed.", "Strategic depth is achieved through a complex system of rock-paper-scissors where rock occasionally transforms into dynamite without warning.", "Action queuing allows for elaborate plans that enemies subsequently dismantle with the casual efficiency of a chess grandmaster playing against a toddler."],
'Tower Defense': ["The tower defense mechanics tap into the primal human satisfaction of watching automated systems obliterate waves of enemies while you do absolutely nothing.", "Strategic tower placement creates a false sense of control in a genre that's essentially about watching numbers go down while pretty visual effects happen.", "The escalating wave difficulty follows a curve precisely designed to make players feel both challenged and competent until the inevitable difficulty cliff they're not warned about."]
- };
- // Genre-specific comments
+ }; // Genre-specific comments
var genreComments = {
'Horror': ["The horror elements range from genuinely unsettling to accidentally hilarious, sometimes achieving both states simultaneously through particularly buggy monster animations.", "Atmospheric tension has been crafted with such effectiveness that players report feeling anxious even during loading screens and menu navigation.", "Psychological terror builds through masterful pacing that knows exactly when to release tension, which is apparently never based on player heart rate monitors."],
'Dating Sim': ["The romance options offer enough variety that players can explore their taste in fictional partners without the inconvenience of actual human connection.", "Character development arcs are surprisingly nuanced for a game where success is measured by whether digital entities agree to go on pretend dates with you.", "The dialogue trees branch with enough complexity that players can fail at virtual relationships in ways they haven't even managed in real life yet."],
'RPG': ["The role-playing elements offer just enough statistical complexity to make spreadsheet enthusiasts feel their skills are finally being appreciated.", "Character progression systems provide that perfect dopamine hit of watching numbers go up while your actual life achievements remain static.", "Questlines branch with such complexity that completing the main story requires either a photographic memory or an unhealthy relationship with online wikis."],
@@ -4689,10 +4784,9 @@
var _gameState$conceptCar4 = gameState.conceptCards,
mechanic = _gameState$conceptCar4.mechanic,
genre = _gameState$conceptCar4.genre,
platform = _gameState$conceptCar4.platform;
- var review = "Gameplay: ".concat(score, "/10\n");
- // Special combinations - pick only one
+ var review = "Gameplay: ".concat(score, "/10\n"); // Special combinations - pick only one
if (mechanic === 'Gacha' && genre === 'Horror') {
var options = ["The horror elements work surprisingly well with the gacha mechanics. Nothing says terror like spending real money and getting your 15th duplicate character. The \"Despair Meter\" that fills as you pull more common items is genuinely anxiety-inducing. We're particularly impressed by the pity system that activates only after you've spent enough to finance a small car.", "The psychological horror of the gacha system creates genuine dread as players face the twin terrors of poor drop rates and dwindling bank accounts. The rare character summon animation that occasionally shows your real-life financial statements is a particularly cruel touch.", "Fusion of horror and gacha creates the unique experience of being frightened both by the game's monsters and by your credit card statements. The special 'financial horror' game mode where pull rates decrease in proportion to your remaining savings is diabolically inventive."];
review += options[Math.floor(Math.random() * options.length)] + " ";
} else if (platform === 'Smart Fridge' && genre === 'Horror') {
@@ -4702,16 +4796,14 @@
// Add ONE mechanic comment if available
if (mechanic && mechanicComments[mechanic]) {
var options = mechanicComments[mechanic];
review += options[Math.floor(Math.random() * options.length)] + " ";
- }
- // Add ONE genre comment if available
+ } // Add ONE genre comment if available
if (genre && genreComments[genre]) {
var options = genreComments[genre];
review += options[Math.floor(Math.random() * options.length)] + " ";
}
- }
- // Apply smart truncation
+ } // Apply smart truncation
review = smartTruncateReview(review, 500) + "\n\n";
return review;
}
function generateTechnicalReview(score) {
@@ -4725,10 +4817,9 @@
'Blockchain': ["The technical implementation successfully ensures that every minor game action requires enough electricity to power a small village. The distributed architecture guarantees that simple operations which would take milliseconds on a regular platform instead involve thousands of computers performing cryptographic calculations.", "The blockchain verification system creates an innovative technical delay between player actions and their consequences, which the developers have retroactively branded as 'strategic contemplation time' rather than 'waiting for transaction confirmation.'", "The distributed ledger architecture achieves the technical marvel of making simple database lookups cost actual money. The developers have pioneered a new metric called 'performance per kilowatt-hour' which somehow manages to be simultaneously impressive and horrifying."],
'Smart Fridge': ["The refrigeration unit integration achieves the technical breakthrough of using CPU heat to fight the appliance's primary cooling function, creating a self-defeating loop of efficiency that physicists are still trying to understand. Ice cube generation algorithms slow dramatically during graphics-intensive sequences.", "Temperature management systems display remarkable technical coordination, cooling game assets alongside actual food items with varying degrees of success. Several players report milk spoilage directly proportional to gameplay session length.", "The technical architecture leverages the appliance's unique capabilities, with loading times carefully synchronized to door opening events. The vegetable crisper drawer now doubles as an emergency heat sink during particularly demanding gameplay sequences."],
'Smart Watch': ["The wrist-mounted implementation demonstrates the technical achievement of displaying recognizable graphics on a screen the size of a postage stamp. Touch precision has been calibrated to the exact width of fingers significantly wider than any interactive elements.", "Battery optimization represents a technical breakthrough in the field of 'barely functional.' The aggressive power management ensures gameplay sessions end precisely when reaching critical moments, with a helpful 'low battery' notification obscuring the screen seconds before shutdown.", "The processing architecture makes innovative use of the limited chipset, primarily by offloading calculations to the user's patience. The haptic feedback system has been finely tuned to either be completely imperceptible or startle you into dropping your arm."],
'Metaverse': ["The persistent world architecture demonstrates the technical marvel of maintaining stability while simultaneously ensuring that no two users ever experience the same version of reality. Desynchronization has been retroactively classified as a 'perception filter' feature.", "Cross-platform avatar systems achieve the technical feat of making your digital representation look equally uncanny regardless of what device you're using. Physics calculations take place across distributed servers in what appears to be different timelines.", "The technical infrastructure exhibits the remarkable ability to consume bandwidth as if it's a competitive sport. Social proximity voice chat has been calibrated to ensure you hear primarily breathing, background conversations, and inexplicable static from nearby users."]
- };
- // Feature-specific comments
+ }; // Feature-specific comments
var featureComments = {
'Cloud Save': ["The cloud synchronization works with the reliability of weather forecasting, occasionally causing data rain where you least expect it.", "Cross-device progression functions seamlessly when it works and creates existential crises when it doesn't, with saved games occasionally entering quantum states of both existence and non-existence.", "The backup system ensures player data is theoretically safe, though the recovery process requires technical knowledge roughly equivalent to a computer science minor."],
'Microtransactions': ["The monetization model has been designed with the subtle touch of a carnival barker with a psychology degree, making wallets open through carefully calibrated frustration thresholds.", "Optional purchases range from purely cosmetic to suspiciously advantageous, with price points carefully calculated to seem reasonable until you do the actual math.", "The premium currency exchange rate uses numerical values specifically chosen to make real-world cost calculations just inconvenient enough to discourage them."],
'AI Companions': ["The artificial intelligence creates companions just smart enough to be helpful but just dumb enough to remind you they're not real people, a balance the developers hit entirely by accident.", "NPC behavior patterns use machine learning to simulate human interaction with all the authenticity of a customer service chatbot that's having an off day.", "The companion system creates the perfect illusion of relationship without the messy complications of actual human connection, a feature psychologists are still debating the implications of."],
@@ -4741,10 +4832,9 @@
};
var _gameState$conceptCar5 = gameState.conceptCards,
platform = _gameState$conceptCar5.platform,
feature = _gameState$conceptCar5.feature;
- var review = "Technical Performance: ".concat(score, "/10\n");
- // Special platform-feature combinations - pick only one
+ var review = "Technical Performance: ".concat(score, "/10\n"); // Special platform-feature combinations - pick only one
if (platform === 'Blockchain' && feature === 'Cloud Save') {
var options = ["Storing save files on the blockchain works flawlessly, assuming you don't mind paying gas fees every time you want to save your progress. Each save point costs roughly the same as a nice dinner. Players now face the existential question of whether their gameplay is worth the environmental impact of storing their inventory data on thousands of computers worldwide.", "The blockchain-based save system creates the world's first gaming experience where your saves are technically public property. Each checkpoint requires a transaction fee that fluctuates wildly based on network congestion, leading to players developing elaborate 'save strategies' to minimize costs. The in-game economy is now less volatile than the actual save system.", "Combining blockchain validation with cloud saving creates the unique technical achievement of making game preservation simultaneously permanent and prohibitively expensive. Players report budgeting 'save allowances' and developing anxiety around in-game checkpoints that exceeds the tension of actual gameplay."];
review += options[Math.floor(Math.random() * options.length)] + " ";
} else if (platform === 'VR' && feature === 'Offline Mode') {
@@ -4757,24 +4847,21 @@
// Platform-specific technical commentary - pick only one
if (platform && platformComments[platform]) {
var options = platformComments[platform];
review += options[Math.floor(Math.random() * options.length)] + " ";
- }
- // Feature-specific technical notes - pick only one
+ } // Feature-specific technical notes - pick only one
if (feature && featureComments[feature]) {
var options = featureComments[feature];
review += options[Math.floor(Math.random() * options.length)] + " ";
}
- }
- // Add ONE coherence or bug comment if applicable, not both
+ } // Add ONE coherence or bug comment if applicable, not both
if (gameState.codeCoherence < 30 && Math.random() < 0.7) {
var lowCoherenceVibeComments = ["The glitch aesthetic adds an unintentionally authentic layer of digital decay. The technical inconsistencies create a uniquely unstable atmosphere that feels like playing inside a slowly corrupting file.", "The frequent visual anomalies establish a distinctly unsettling vibe. The unpredictable technical behavior creates an atmosphere of digital uncertainty that feels strangely appropriate.", "The persistent rendering issues create a peculiarly dreamlike ambiance. The technical instability produces an accidentally surreal atmosphere where reality itself seems conditionally rendered.", "The numerous graphical inconsistencies deliver a uniquely janky charm. The technical hiccups create an atmosphere of computational struggle that feels oddly personified.", "The constant visual artifacts establish an accidentally avant-garde aesthetic. The technical limitations create an unintentionally experimental vibe that digital artists might intentionally try to replicate."];
review += lowCoherenceVibeComments[Math.floor(Math.random() * lowCoherenceVibeComments.length)] + " ";
} else if (gameState.bugs > 7 && Math.random() < 0.7) {
var highBugComments = ["Bugs have evolved into features so seamlessly that we're no longer sure which is which. The development roadmap now apparently consists of waiting to see which glitches players enjoy and retroactively claiming they were intentional.", "The game contains so many interconnected bugs that fixing one creates three more, leading to the development team embracing a 'digital ecosystem' approach where bugs are treated as protected species essential to the game's environment.", "Technical issues have been incorporated into the lore so thoroughly that the most dedicated players now deliberately trigger glitches as spiritual experiences. The subreddit features daily 'bug worship' threads.", "Glitches occur with such consistent frequency that speedrunners have developed a taxonomy to classify them, complete with Latin nomenclature. The community now speaks of bugs as naturalists would discuss rare butterflies, with similar reverence and cataloging effort.", "The error states have become so numerous and specific that they've developed into their own progression system. Players proudly share screenshots of particularly rare crash messages, with the 'Schrรถdinger Exception: Object exists and doesn't exist simultaneously' being the most coveted achievement."];
review += highBugComments[Math.floor(Math.random() * highBugComments.length)] + " ";
- }
- // Apply smart truncation
+ } // Apply smart truncation
review = smartTruncateReview(review, 500) + "\n\n";
return review;
}
function generateInnovationReview(score) {
@@ -4788,10 +4875,9 @@
'Blockchain': ["The distributed ledger implementation creates unique ownership models that solve problems no one actually had while introducing several exciting new ones.", "Decentralized architecture ensures no single entity controls the experience, though mysterious collectives of crypto enthusiasts may effectively determine your gameplay fate.", "The token-based ecosystem innovates by making simple interactions both more complicated and more expensive, a breakthrough in user experience that wasn't actively sought."],
'Smart Fridge': ["The refrigerator interface creates a revolutionary fusion of gaming and food storage, allowing players to work up an appetite while simultaneously having snacks within arm's reach.", "Temperature-sensitive gameplay uses the appliance's cooling systems in ways that void warranties with remarkable efficiency and surprising entertainment value.", "The kitchen-based gaming experience breaks new ground by allowing family members to disapprove of both your gameplay choices and dietary habits simultaneously."],
'Smart Watch': ["The wrist-mounted experience innovates through extreme miniaturization that makes squinting a core gameplay mechanic, developing ocular muscles in unprecedented ways.", "Motion controls leverage accelerometers for gameplay that physical therapists describe as 'actively concerning for long-term wrist health.'", "The glanceable design creates a new category of micro-gaming sessions that fit perfectly between checking the time and ignoring notifications from actual human relationships."],
'Metaverse': ["The persistent virtual world pushes the boundaries of digital existence, creating spaces where players can experience the future of social interaction or the peak of technological gimmickry, depending on perspective.", "Cross-platform virtual presence allows unprecedented avatar expression, though most users still default to being implausibly attractive versions of themselves or bizarre anthropomorphic creatures.", "The interconnected experience creates digital spaces that exist perpetually, ensuring that embarrassing social interactions can now live forever instead of fading from memory."]
- };
- // Visual style innovation comments
+ }; // Visual style innovation comments
var visualInnovations = {
'ASCII': ["The text-based visuals represent a bold return to computing's roots, proving definitively that contemporary graphics cards are essentially expensive space heaters for most gameplay needs.", "Character-based rendering creates a unique aesthetic that forces players' imaginations to do the heavy lifting, a form of outsourced processing that's remarkably efficient.", "The terminal style establishes a retro-future vibe that somehow manages to be simultaneously nostalgic and avant-garde, like vinyl records but for eyestrain."],
'Pixel Art': ["The deliberately limited resolution creates a visual language that proves more pixels don't necessarily make better art, just as more notes don't necessarily make better music.", "Carefully placed squares create an aesthetic that balances nostalgic familiarity with contemporary sensibilities, like comfort food prepared by a gourmet chef.", "The constrained palette forces creative solutions that turn technical limitations into stylistic triumphs, proving sometimes the box is actually where the best thinking happens."],
'Hand-drawn': ["The illustrated approach brings warmth and humanity to digital spaces, with imperfections that feel refreshingly authentic in an era of algorithmic perfection.", "Manually created visuals showcase the unique power of human artistic expression, though frame-by-frame animation suggests the possible involvement of interns with questionable labor contracts.", "The organic style creates a visual signature so distinctive it's effectively impossible to confuse with any other title, for better or occasionally much worse."],
@@ -4802,10 +4888,9 @@
'Voxel': ["The cube-based construction system innovates by making every element of the world consistent with its building blocks, creating a universe that's simultaneously coherent and impossible.", "The blocky aesthetic creates a unique visual language where detail comes from arrangement rather than fidelity, proving creativity thrives within constraints.", "The volumetric approach bridges the gap between 2D and 3D design philosophies, creating spaces that feel simultaneously accessible and complex."],
'Demake': ["The deliberately downgraded visuals create a unique nostalgic experience that couldn't exist without first having the high-fidelity original to contrast against, making it both derivative and wholly original.", "Technical constraints are elevated to artistic choices, proving that limitation often breeds creativity more effectively than unlimited resources.", "The retrograde aesthetic creates a fascinating alternate history of gaming where different technological paths might have been taken, like digital archaeological experiments."]
};
var review = "Innovation: " + score + "/10\n";
- var concepts = gameState.conceptCards;
- // Check for particularly innovative combinations - pick only one
+ var concepts = gameState.conceptCards; // Check for particularly innovative combinations - pick only one
if (concepts.platform === 'VR' && concepts.visual === 'ASCII') {
var options = ["We've never seen anything like this, and that's either brilliant or terrifying. The combination of ASCII art in virtual reality creates an experience that defies conventional categorization. The 'pay-to-escape' mechanic where you can spend real money to skip particularly nauseating text segments is either predatory or genius. The developer's insistence that 'immersive typography is the future of gaming' might be visionary or completely delusional.", "The fusion of virtual reality and ASCII creates a sensory experience that neurologists are studying with great interest. Looking at walls of text in three-dimensional space has caused several playtesters to develop a new form of synesthesia where they 'taste' different letters. The developer's claim that this is 'expanding human consciousness through digital means' feels like a convenient reframing of what is essentially torture by typography.", "This bizarre combination of VR immersion and textual abstraction creates gaming's first genuine avant-garde movement. Players report experiencing the literal feeling of 'being inside language' - an effect that is equal parts profound and nauseating. The community that has formed around this experience communicates exclusively in parentheses and semicolons, claiming that traditional language 'no longer suffices after what they've seen.'"];
review += options[Math.floor(Math.random() * options.length)];
} else if (concepts.platform === 'Smart Fridge' && concepts.genre === 'Horror') {
@@ -4818,39 +4903,33 @@
// Platform innovations - pick only one if available
if (concepts.platform && platformInnovations[concepts.platform]) {
var options = platformInnovations[concepts.platform];
review += options[Math.floor(Math.random() * options.length)] + " ";
- }
- // Visual innovations - pick only one if available
+ } // Visual innovations - pick only one if available
if (concepts.visual && visualInnovations[concepts.visual]) {
var options = visualInnovations[concepts.visual];
review += options[Math.floor(Math.random() * options.length)] + " ";
}
- }
- // Innovation bonus for high vibe points - pick only one if applicable
+ } // Innovation bonus for high vibe points - pick only one if applicable
if (gameState.vibePoints > 80 && Math.random() < 0.7) {
var highVibeInnovations = ["The sheer audacity of the concept has created its own genre. Industry analysts are already scrambling to coin terminology for the wave of imitators that will inevitably follow.", "The development team's commitment to their bizarre vision has resulted in something so unique that it defies conventional game theory. Several game design textbooks are being rewritten to include sections called 'But Sometimes This Works Too.'", "The game exists in a category entirely its own, leaving critics struggling to find comparison points. The resulting semantic crisis has led to the establishment of new reviewing guidelines specifically addressing concept originality.", "The fundamental innovation on display has created something so unique that multiple game design programs are adding it to their curriculum as a case study in conceptual bravery. Future developers will likely reference this title when defending their own unusual concepts.", "The brilliant madness behind this creation demonstrates what happens when developers completely ignore market research and conventional wisdom. The result is something so distinct that it has created its own classification problem for digital storefronts, none of which have appropriate category tags."];
review += highVibeInnovations[Math.floor(Math.random() * highVibeInnovations.length)] + " ";
- }
- // Fallback innovation comments if review is too short
+ } // Fallback innovation comments if review is too short
if (review.length < 200) {
var fallbackInnovations = {
high: ["This concept brilliantly combines elements that shouldn't work together into something unexpectedly cohesive. The developers have created a new gameplay paradigm that defies conventional categorization, suggesting either remarkable foresight or a happy accident born from creative chaos.", "The audacious fusion of seemingly incompatible elements creates something genuinely fresh. While individual components are familiar, their implementation here feels revolutionary, as if someone deliberately ignored 'best practices' and stumbled onto something better.", "Innovation doesn't always mean inventing new mechanics, but rather combining existing ones in ways nobody thought to try. This title exemplifies that philosophy, bringing together disparate elements into something greater than the sum of its parts."],
medium: ["While not revolutionary, the game offers several novel twists on familiar formulas. The creative combination of established mechanics with unexpected elements provides just enough innovation to distinguish it from similar titles.", "The concept shows admirable creativity in working within established frameworks while adding enough unique elements to feel fresh. It won't redefine genres, but it successfully carves out its own identity in a crowded market.", "There's innovation happening here, though more evolutionary than revolutionary. The development team has taken existing ideas and reconfigured them in ways that feel sufficiently novel without reinventing the wheel."],
low: ["The innovation on display feels more accidental than intentional, as if the developers were aiming for something conventional but missed in ways that occasionally produce interesting results. These happy accidents don't quite compensate for the overall derivative nature.", "While attempting something different, the game struggles to transcend the sum of its borrowed parts. Occasional flashes of creativity peek through the familiar framework, but they're too sporadic to establish a truly innovative identity.", "The concept seems caught between innovation and imitation, resulting in an experience that never fully commits to either path. The occasional unique element gets lost amid overly familiar mechanics and systems."]
- };
- // Select appropriate tier based on score
+ }; // Select appropriate tier based on score
var tier = "medium";
if (score >= 8) {
tier = "high";
} else if (score <= 3) {
tier = "low";
- }
- // Add a fallback comment
+ } // Add a fallback comment
var options = fallbackInnovations[tier];
review += options[Math.floor(Math.random() * options.length)] + " ";
- }
- // Apply smart truncation
+ } // Apply smart truncation
review = smartTruncateReview(review, 500) + "\n\n";
return review;
}
function generateVibeReview(score) {
@@ -4864,10 +4943,9 @@
'Blockchain': ["The distributed ledger foundation creates a strange value-infused atmosphere where every action feels simultaneously meaningless and potentially worth real money.", "The crypto-backed experience generates a unique tension between play and investment, where enjoyment is always colored by awareness of speculative value fluctuations.", "The tokenized environment creates an unusual sense of digital ownership that feels both empowering and absurd, like having a notarized deed to a cloud or sunrise."],
'Smart Fridge': ["The kitchen appliance platform creates a bizarrely domestic atmosphere that transforms food storage into entertainment, blurring the line between sustenance and distraction.", "The refrigerator interface establishes a uniquely situated experience that feels anchored to a specific household location, creating a strangely territorial relationship with the game.", "The cold storage gaming creates an atmosphere that literally changes the temperature of the room, with play sessions accompanied by wafts of chilled air and the subtle scent of leftovers."],
'Smart Watch': ["The wrist-mounted experience creates an intimate, almost secretive vibe that feels like carrying a tiny world with you everywhere, accessible with the subtlest glance.", "The watch interface establishes a uniquely constrained atmosphere where limitations become defining features rather than drawbacks, like haiku in interactive form.", "The glanceable gaming creates a fractured experience that exists in stolen moments throughout the day, creating a peculiarly integrated relationship between the game and daily life."],
'Metaverse': ["The persistent virtual world creates an uncanny atmosphere where digital space takes on properties of real estate, complete with territorial feelings and the strange concept of 'location' in infinitely replicable data.", "The shared online environment establishes a uniquely social vibe where the presence of others becomes part of the aesthetic, for better or worse.", "The avatar-mediated experience creates a layer of identity play that colors every interaction, where everyone is simultaneously themselves and a performance of themselves."]
- };
- // Visual style vibes
+ }; // Visual style vibes
var visualVibes = {
'ASCII': ["The text-based visuals create a strangely literary atmosphere that engages the imagination in ways high-resolution graphics can't, like reading a book that occasionally reads back.", "The character-based representation establishes a uniquely abstracted vibe that feels simultaneously primitive and sophisticated, like cave paintings created by mathematicians.", "The monospace aesthetic creates a distinctly digital atmosphere that celebrates rather than hides its technological nature, unapologetically computational in its presentation."],
'Pixel Art': ["The deliberately limited resolution creates a nostalgic yet timeless vibe that feels like memories made tangible, blending retro aesthetics with contemporary sensibilities.", "The blocky visual language establishes a uniquely constrained beauty that finds expression through limitations rather than despite them.", "The pixel-perfect precision creates an atmosphere of handcrafted care, where each dot on the screen feels deliberately placed rather than procedurally generated."],
'Hand-drawn': ["The manual illustration style creates a warmly organic atmosphere that feels touched by human hands rather than rendered by algorithms.", "The drawn aesthetic establishes a uniquely expressive vibe where imperfections become signature elements rather than technical failings.", "The sketched visual language creates an atmosphere of artistic interpretation rather than simulation, representing reality through personal perspective rather than photographic accuracy."],
@@ -4878,10 +4956,9 @@
'Voxel': ["The cube-based construction creates a playfully systematic atmosphere that feels like a world made of digital LEGO, inviting interaction through its very form.", "The blocky aesthetic establishes a uniquely tactile vibe despite its digital nature, suggesting a world that could be physically built and manipulated.", "The volumetric visual language creates an atmosphere of consistent logic, where everything from mountains to monsters adheres to the same cubic principles."],
'Demake': ["The deliberately downgraded visuals create a fascinating alternate history vibe, like a glimpse into a timeline where different technological choices were made.", "The retroactively constrained aesthetic establishes a uniquely nostalgic atmosphere that feels both familiar and impossible, recognizable yet never actually existed.", "The artificially limited visual language creates an atmosphere of technological interpretation, translating modern ideas through historical limitations."]
};
var review = "Vibe Factor: ".concat(score, "/10\n");
- var concepts = gameState.conceptCards;
- // Special combination vibes - pick only one
+ var concepts = gameState.conceptCards; // Special combination vibes - pick only one
if (concepts.visual === 'ASCII' && concepts.platform === 'VR') {
var options = ["The game oozes style, even if that style causes immediate discomfort. The pulsing green terminal text, the suspenseful beeping sounds, and the whispered ASCII art jumpscares all contribute to a cohesive, if bewildering, aesthetic.", "The fusion of retro terminal visuals with cutting-edge VR creates an atmosphere that's equal parts nostalgic and nauseating. The decision to render everything in phosphorescent green text creates the unique experience of feeling like you're trapped inside a 1980s hacker's fever dream.", "The deliberately jarring combination of primitive text art and immersive virtual reality creates a uniquely unsettling atmosphere. The contrast between the technological simplicity of ASCII and the sophistication of VR produces a digital uncanny valley effect that several art critics have described as 'intentionally hostile to human perception.'"];
review += options[Math.floor(Math.random() * options.length)] + " ";
} else if (concepts.platform === 'Smart Fridge' && concepts.genre === 'Horror') {
@@ -4894,51 +4971,43 @@
// Platform-specific vibes - pick only one
if (concepts.platform && platformVibes[concepts.platform]) {
var options = platformVibes[concepts.platform];
review += options[Math.floor(Math.random() * options.length)] + " ";
- }
- // Visual style vibes - pick only one
+ } // Visual style vibes - pick only one
if (concepts.visual && visualVibes[concepts.visual]) {
var options = visualVibes[concepts.visual];
review += options[Math.floor(Math.random() * options.length)] + " ";
}
- }
- // Vibe points influence - pick only one if applicable
+ } // Vibe points influence - pick only one if applicable
if (gameState.vibePoints > 90 && Math.random() < 0.7) {
var highVibeComments = ["The game radiates an infectious energy that's impossible to ignore. The carefully crafted atmosphere creates a uniquely cohesive experience that remains consistent across every aspect of design.", "The overwhelming sense of style creates an instantly recognizable aesthetic fingerprint. Every element feels like part of a carefully orchestrated whole, creating a uniquely signature experience.", "The perfectly calibrated atmosphere achieves that rare quality of total cohesion. The game knows exactly what it wants to be and commits to that vision with unwavering confidence.", "The masterfully crafted ambiance establishes an immediate and distinct personality. This is a game that understands exactly what mood it wants to create and pursues that goal with remarkable consistency.", "The exceptional vibrance pervades every aspect of the experience. Rarely have we seen such a perfect alignment of visual design, sound, and gameplay feel creating such a distinctive sensory impression."];
review += highVibeComments[Math.floor(Math.random() * highVibeComments.length)] + " ";
} else if (gameState.vibePoints < 50 && Math.random() < 0.7) {
var lowVibeComments = ["The game's atmosphere is as coherent as a fever dream, which might be intentional. The wildly inconsistent tone creates a uniquely disorienting experience that defies categorization.", "The conflicting stylistic choices create a distinctly fractured ambiance. Different elements feel like they were designed in isolation from each other, creating an unintentionally surreal collage effect.", "The disjointed aesthetic elements establish a peculiarly inconsistent vibe. The game seems to be having an identity crisis in real-time, oscillating between multiple competing styles.", "The contradictory design language delivers a uniquely confused atmosphere. The game can't seem to decide what mood it's trying to establish, creating an accidentally avant-garde effect.", "The incoherent stylistic approach creates an atmosphere of digital schizophrenia. Playing feels like rapidly channel-surfing between completely unrelated experiences stitched together by tenuous gameplay mechanics."];
review += lowVibeComments[Math.floor(Math.random() * lowVibeComments.length)] + " ";
- }
- // Add coherence effects if applicable
+ } // Add coherence effects if applicable
if (gameState.codeCoherence < 40 && Math.random() < 0.7) {
var lowCoherenceVibeComments = ["The glitch aesthetic adds an unintentionally authentic layer of digital decay. The technical inconsistencies create a uniquely unstable atmosphere that feels like playing inside a slowly corrupting file.", "The frequent visual anomalies establish a distinctly unsettling vibe. The unpredictable technical behavior creates an atmosphere of digital uncertainty that feels strangely appropriate.", "The persistent rendering issues create a peculiarly dreamlike ambiance. The technical instability produces an accidentally surreal atmosphere where reality itself seems conditionally rendered.", "The numerous graphical inconsistencies deliver a uniquely janky charm. The technical hiccups create an atmosphere of computational struggle that feels oddly personified.", "The constant visual artifacts establish an accidentally avant-garde aesthetic. The technical limitations create an unintentionally experimental vibe that digital artists might intentionally try to replicate."];
review += lowCoherenceVibeComments[Math.floor(Math.random() * lowCoherenceVibeComments.length)] + " ";
- }
- // Fallback vibes if review is too short
+ } // Fallback vibes if review is too short
if (review.length < 200) {
var fallbackVibes = {
high: ["The game radiates a distinctly confident aura, maintaining its unique aesthetic across every aspect of design. From interface to gameplay mechanics, there's a cohesive vision that creates an immediately recognizable identity. Few titles achieve this level of stylistic consistency.", "The carefully crafted atmosphere demonstrates masterful understanding of mood and tone. Every element feels deliberately chosen to contribute to the overall sensory experience, creating an immersive world with its own internal logic and personality.", "There's a magnetic quality to the game's aesthetic that's difficult to quantify yet impossible to ignore. The developers have created something with genuine personality that leaves a lasting impression beyond the mechanical components."],
medium: ["The game establishes a reasonably cohesive atmosphere, though occasional inconsistencies prevent it from achieving a truly distinctive identity. There's enough personality to make it memorable, even if the vibe isn't consistently maintained across all elements.", "While not revolutionary in its presentation, the game successfully cultivates a pleasant ambiance that enhances the core experience. The aesthetic doesn't break new ground, but it effectively supports the gameplay with appropriate mood and style.", "The vibe strikes a comfortable balance between familiar and fresh, creating an environment that feels welcoming yet still has its own character. It won't redefine aesthetic standards, but it demonstrates solid craftsmanship in establishing mood."],
low: ["The game struggles to establish a consistent atmosphere, resulting in a fragmented experience where different elements feel stylistically disconnected. There are occasional moments of cohesion, but they're undermined by conflicting design choices.", "The inconsistent tone creates a disjointed vibe that never quite coalesces into something distinctive. Individual elements might work in isolation, but together they create an experience that lacks a clear aesthetic identity.", "There's a palpable sense that the game's atmosphere was an afterthought rather than a central consideration, with various components pulling in different stylistic directions. The resulting vibe feels muddled, occasionally working despite itself rather than by design."]
- };
- // Select appropriate tier based on score
+ }; // Select appropriate tier based on score
var tier = "medium";
if (score >= 8) {
tier = "high";
} else if (score <= 3) {
tier = "low";
- }
- // Add a fallback comment
+ } // Add a fallback comment
var options = fallbackVibes[tier];
review += options[Math.floor(Math.random() * options.length)] + " ";
- }
- // Apply smart truncation
+ } // Apply smart truncation
review = smartTruncateReview(review, 500) + "\n\n";
return review;
-}
-// Create a new function to generate the features section
+} // Create a new function to generate the features section
function generateFeaturesSection() {
var featuresSection = "";
if (gameState.discoveredFeatures.length > 0) {
featuresSection = "Notable Features\n";
@@ -4954,12 +5023,10 @@
if (score < 65 && gameState.conceptCards.platform !== 'Smart Fridge' && !(gameState.conceptCards.visual === 'ASCII' && gameState.conceptCards.platform === 'VR')) {
return ""; // Skip for lower scores with no interesting combinations
}
var achievements = [];
- var concepts = gameState.conceptCards;
- // Add title
- var section = "Notable Achievements\n";
- // Check for specific combinations
+ var concepts = gameState.conceptCards; // Add title
+ var section = "Notable Achievements\n"; // Check for specific combinations
if (concepts.platform === 'VR' && concepts.visual === 'ASCII') {
achievements.push("**Typography Torture Award**: First game to cause motion sickness using only the letter 'O'");
achievements.push("**Ophthalmologist's Best Friend**: Created unprecedented demand for eye therapy");
}
@@ -4973,10 +5040,9 @@
}
if (concepts.visual === 'PowerPoint' && (concepts.genre === 'Battle Royale' || concepts.genre === 'Shooter')) {
achievements.push("**Corporate Combat Certificate**: Transformed boring presentations into lethal entertainment");
achievements.push("**Star Wipe of Death**: Weaponized slide transitions successfully");
- }
- // Specific feature achievements
+ } // Specific feature achievements
if (concepts.feature === 'Microtransactions' && score > 75) {
achievements.push("**Wallet Vampire Award**: Most creative excuses for charging players");
achievements.push("**Monetization Innovation**: Discovered 17 new ways to extract money from willing players");
}
@@ -4986,25 +5052,21 @@
}
if (concepts.feature === 'Cloud Save' && gameState.bugs > 5) {
achievements.push("**Digital Afterlife**: Save files that continue playing without player input");
achievements.push("**Cloud Migration**: Game states that mysteriously appear in other players' games");
- }
- // Bug-related achievements for games with high bug counts but good scores
+ } // Bug-related achievements for games with high bug counts but good scores
if (gameState.bugs > 6 && score > 70) {
achievements.push("**It's Not a Bug Award**: Most successful rebranding of errors as features");
achievements.push("**Chaos Engineering Certificate**: Turning technical debt into player engagement");
- }
- // High coherence achievements
+ } // High coherence achievements
if (gameState.codeCoherence > 80 && score > 80) {
achievements.push("**Technical Excellence**: Surprisingly functional given the concept complexity");
achievements.push("**Stability Wizard**: Maintained coherence despite logical impossibilities");
- }
- // High vibe achievements
+ } // High vibe achievements
if (gameState.vibePoints > 85) {
achievements.push("**Vibe Architects**: Created inexplicable but undeniable digital atmosphere");
achievements.push("**Cult Following Creator**: Generated passionate community around bizarre concept");
- }
- // If we have achievements, format them into the section
+ } // If we have achievements, format them into the section
if (achievements.length > 0) {
// Take up to 4 achievements maximum
var selectedAchievements = achievements.slice(0, 4);
section += selectedAchievements.map(function (achievement) {
@@ -5017,10 +5079,9 @@
}
}
function generateFinalThoughts(score, ratings) {
var concepts = gameState.conceptCards;
- var review = "Final Thoughts\n";
- // Special combination conclusions - expanded with more options
+ var review = "Final Thoughts\n"; // Special combination conclusions - expanded with more options
if (concepts.platform === 'VR' && concepts.visual === 'ASCII') {
var options = ["\"" + concepts.platform + " " + concepts.visual + " " + concepts.genre + "\" is the game nobody asked for but somehow can't stop talking about. It's created a niche community of players who now communicate exclusively in ASCII art and spend concerning amounts on virtual terminal upgrades.", "This unholy marriage of cutting-edge VR technology and 1970s terminal aesthetics should not work on any conceivable level, and yet it has cultivated a dedicated following who claim to have 'seen beyond the veil of conventional graphics.' Multiple ophthalmologists have issued statements specifically warning against extended play sessions.", "The baffling combination of immersive headset technology and primitive text characters has created gaming's first legitimate art-house cult experience. Players either quit within ten minutes or become evangelists who insist that 'you haven't really experienced digital consciousness until you've been inside the green text.'"];
review += options[Math.floor(Math.random() * options.length)] + " ";
} else if (concepts.platform === 'Smart Fridge' && concepts.genre === 'Horror') {
@@ -5034,10 +5095,9 @@
review += options[Math.floor(Math.random() * options.length)] + " ";
} else if (concepts.platform === 'Metaverse' && concepts.mechanic === 'Gacha') {
var options = ["This unholy marriage of speculative real estate and gambling mechanics has created a digital economy more volatile than cryptocurrency. Players are both devastated by their terrible luck and convinced their virtual plot adjacent to a virtual dumpster will be worth millions someday.", "The combination of persistent virtual world and randomized collection mechanics has created an unprecedented digital casino where the house is literally everywhere. Players have formed support groups to cope with both spending regret and the peculiar phenomenon of 'location envy' when friends pull rare property locations.", "Fusing virtual world permanence with chance-based acquisition has birthed a bizarre economic landscape where digital scarcity is artificially maintained through algorithms designed to maximize frustration. Yet thousands of players continue investing real money in the virtual equivalent of a slot machine connected to a real estate office."];
review += options[Math.floor(Math.random() * options.length)] + " ";
- }
- // Score-based conclusions - significantly expanded
+ } // Score-based conclusions - significantly expanded
if (score >= 90) {
var brilliantResponses = ["While conventional wisdom would suggest this combination should fail catastrophically, the sheer audacity of the concept has carved out a cult following. Expect academic papers analyzing this game's cultural impact for years to come.", "Against all logic and several laws of game design, this bizarre experiment has become a breakthrough hit. It's as if someone threw random ingredients into a pot and accidentally created a gourmet dish that food critics can't stop raving about.", "This game shouldn't work. Multiple designers reviewed the concept document and resigned on the spot. Yet here we are, witnessing what can only be described as accidental genius or the collective madness of the gaming public.", "The development team has apparently discovered a secret formula where maximum absurdity equals maximum enjoyment. They should immediately lock this recipe in a vault and protect it from competitors.", "By all reasonable metrics, this conceptual contradiction should produce an unplayable disaster. Instead, it's become a watershed moment that future developers will reference when defending their own seemingly ridiculous ideas.", "This remarkable achievement in conceptual dissonance somehow transcends its contradictory elements to create something genuinely revolutionary. The development team has either stumbled upon or deliberately crafted a new design philosophy that defies conventional categorization.", "The sheer implausibility of this game's success suggests we may need to reconsider fundamental assumptions about player preferences and design coherence. What initially appeared to be a catastrophic combination of incompatible elements has become a template that will undoubtedly spawn countless imitators.", "In the pantheon of unlikely successes, this game deserves a special pedestal. It has not only survived its conceptual contradictions but thrived because of them, creating a new benchmark for creative risk-taking in an industry often accused of playing it safe."];
review += brilliantResponses[Math.floor(Math.random() * brilliantResponses.length)];
} else if (score >= 70) {
@@ -5048,10 +5108,9 @@
review += averageResponses[Math.floor(Math.random() * averageResponses.length)];
} else {
var poorResponses = ["While not quite hitting its mark, the game's ambitious vision can't be faulted for lack of creativity. Like watching someone attempt a quadruple backflip and land face-first โ you have to admire the ambition while wincing at the execution.", "This is the game equivalent of a science experiment that explodes spectacularly. Not particularly successful, but certainly memorable and likely to inspire safer, more controlled iterations in the future.", "The developers have created something so uniquely perplexing that it might achieve immortality through memes alone. Future game historians will study this as either a cautionary tale or evidence of untreated carbon monoxide leaks in the development studio.", "In the grand tradition of 'so bad it's good' media, this game may find a second life as a curiosity piece. Expect YouTube compilations titled 'You Won't Believe This Actually Got Released' featuring extensive footage.", "This bewildering creation demonstrates what happens when conceptual ambition significantly outpaces technical execution. The resulting experience feels like watching someone attempt to translate a fever dream directly into playable form without the intermediate step of coherent design.", "Like an architectural structure designed by an algorithm fed contradictory instructions, this game collapses under the weight of its incompatible elements. Yet there's something fascinating about witnessing such a spectacular structural failure.", "This title achieves the rare distinction of being both forgettable and impossible to forget โ forgettable in its failure to create engaging gameplay, but impossible to forget due to its baffling design decisions. It will likely become a benchmark for creative hubris.", "The most positive interpretation of this release is as a valuable learning experience for everyone involved. While players may not enjoy the game itself, developers throughout the industry will benefit from analyzing exactly how these interesting ideas went so dramatically wrong."];
review += poorResponses[Math.floor(Math.random() * poorResponses.length)];
- }
- // Add microtransaction commentary if present - expanded with more options
+ } // Add microtransaction commentary if present - expanded with more options
if (concepts.feature === 'Microtransactions') {
var mtxComments = ["\n\nP.S. The microtransaction that lets players temporarily restore sanity for $4.99 is both cruel and brilliant.", "\n\nP.S. We question the ethical implications of the 'Pay to Win Friends' feature that charges $2.99 to make NPCs actually like you.", "\n\nP.S. The 'surprise mechanics' that periodically charge your credit card with no explanation are pushing legal boundaries, even for the games industry.", "\n\nP.S. Making players pay real money to adjust the UI so it's actually usable feels legally actionable, yet we can't help but admire the audacity.", "\n\nP.S. The monetization strategy that restricts basic quality-of-life features behind paywalls demonstrates either remarkable business acumen or concerning contempt for players.", "\n\nP.S. The 'Desperation Discount' system that reduces prices after detecting repeated menu visits but before actual purchases shows disturbing insight into consumer psychology.", "\n\nP.S. The feature that transforms real-world advertisements into in-game currency based on proven watching time feels like it was designed by behavioral scientists with questionable ethics.", "\n\nP.S. The 'dynamic pricing' system that charges different amounts based on player spending patterns and playtime should probably be investigated by consumer protection agencies."];
review += mtxComments[Math.floor(Math.random() * mtxComments.length)];
}
@@ -5063,62 +5122,50 @@
visual = _gameState$conceptCar.visual,
genre = _gameState$conceptCar.genre,
mechanic = _gameState$conceptCar.mechanic,
feature = _gameState$conceptCar.feature;
- var reviews = [];
- // Platform-specific reddit comments
+ var reviews = []; // Platform-specific reddit comments
var platformReddit = {
'VR': ["\"Reddit, AITA for neglecting my family to play this VR game for 72 hours straight? Edit: Stop telling me to touch grass, virtual grass counts.\" u/TouchGrassMaybe", "\"Day 14 of the VR playthrough: I now instinctively try to quicksave before awkward conversations in real life.\" u/ImmerseOrDie"],
'Smart Fridge': ["\"The fact that I'm using a food storage device to play games is exactly why aliens won't talk to us.\" u/RefrigeratedGamer", "\"My wife said it was either her or the gaming fridge. I'll miss her sometimes.\" u/SingleWithFridge"],
'Blockchain': ["\"This game costs more in electricity than my student loans but at least I own a jpeg of a sword lol\" u/CryptoGrindset", "\"My GPU died playing this so I buried it with full blockchain honors\" u/MiningMyLife"],
'Smart Watch': ["\"Playing this on my watch has given me a neck cramp that medical science cannot explain\" u/TinyGamerProblems", "\"My boss thinks I'm checking emails during meetings but I'm actually grinding for rare loot\" u/WorkFromWrist"],
'Metaverse': ["\"Spent more on virtual real estate than my actual house is worth, wife doesn't know yet. This is fine.\" u/MetaDebtCollector", "\"Accidentally attended a virtual work meeting as my anime girl avatar, got promoted somehow?\" u/CorporateVTuber"]
- };
- // Visual style-specific reddit comments
+ }; // Visual style-specific reddit comments
var visualReddit = {
'ASCII': ["\"My eyes hurt but I've never felt more alive. 10/10 would develop terminal vision again.\" u/MonospaceEnthusiast", "\"I can now read Matrix code after playing this for a week. Mostly side effects include ruined vision and social life.\" u/ASCIIsUs"],
'PowerPoint': ["\"Finally, a game that prepared me for my corporate job. The slide transitions trigger my fight or flight response.\" u/OfficeSpaceGamer", "\"The star wipe transition is legitimately terrifying. My therapist and I are working through it.\" u/DiedByPowerPoint"],
'Claymation': ["\"The fingerprints visible in every character model make me feel like I'm being watched by the FBI and Wallace & Gromit simultaneously.\" u/ClayMoreEnjoyer", "\"My sleep paralysis demon now appears in claymation. Thanks for that.\" u/StopMotionStopMe"]
- };
- // Genre-specific reddit comments
+ }; // Genre-specific reddit comments
var genreReddit = {
'Horror': ["\"Played this during a storm and the power went out. Neighbors said my scream broke windows three blocks away.\" u/FrightfulRedditor", "\"Thanks to this game I now check behind my shower curtain for ASCII monsters.\" u/AnxietyGaming"],
'Dating Sim': ["\"I'm in a committed relationship with a collection of pixels and my therapist is concerned, but she doesn't understand our connection.\" u/WaifuLover69", "\"My in-game partner has higher standards than anyone I've dated in real life. Got rejected for inconsistent dialogue choices.\" u/ForeverDigital"],
'RPG': ["\"Just a quick PSA: This game has been out for 2 weeks and I've already logged 340 hours. I've forgotten what my children look like. Worth it though.\" u/GrindsetRPGer", "\"Spent 4 hours adjusting my character's eyebrow height only to wear a helmet the entire game. No regrets.\" u/CharacterCreationAddict"]
- };
- // Feature-specific reddit comments
+ }; // Feature-specific reddit comments
var featureReddit = {
'Microtransactions': ["\"Had to take out a second mortgage for the 'Slightly Better Sword' DLC. At least my character looks cool in the homeless shelter.\" u/BrokeGamer2023", "\"The 'Convenience Fee' for using my own saved payment method is both highway robbery and genius. Take my money.\" u/WhaleSpender"],
'AI Companions': ["\"My AI companion keeps giving me unsolicited life advice that's actually better than my real friends' advice. Existential crisis pending.\" u/BotBestie", "\"My AI companion left me for another player with better dialogue choices. I'm not crying, you're crying.\" u/ForeverAloneGamer"],
'Cloud Save': ["\"My cloud save somehow merged with someone else's and now my character has their inventory and dating history. Awkward.\" u/CloudConfusion", "\"Game crashed and my 200-hour save corrupted. Cloud backup was just a picture of a middle finger. 10/10 would lose progress again.\" u/BackupTragedy"]
- };
- // Special combinations
+ }; // Special combinations
var specialCombos = {
'VR_ASCII': ["\"Playing ASCII art in VR is like having a migraine you paid $500 for. Recommend to all my enemies.\" u/TerminalVRsion", "\"The letters float in 3D space like the world's most bewildering eye exam. I can now see through time.\" u/AscendedBeyond"],
'Smart Fridge_Horror': ["\"Never thought I'd be terrified of my own refrigerator but here we are. Had to order takeout for a week because I'm too scared to get milk.\" u/HungryScared", "\"Game makes getting a midnight snack feel like a survival horror experience. Lost 10 pounds from fear alone.\" u/DietByTerror"],
'Blockchain_Dating Sim': ["\"Fell in love with a virtual character that costs me $35 in electricity every time we talk. Still cheaper than my ex.\" u/NFTLoveLife", "\"Had to break up with my blockchain girlfriend during high network traffic. Paid $120 in gas fees just to get ghosted.\" u/CryptoHeartbreak"]
- };
- // Generate negative reviews with bug-related comments
- var bugInsults = ["\"AI slop.\"", "\"Found more bugs than an entomology convention. Dev must be using AI.\" u/QAEnjoyer", "\"Game's code is held together with prayers and randomized API calls. Definite AI slop.\" u/ActualDeveloper", "\"Bugs have formed their own labor union and are demanding better representation in-game. Still better than most AAA releases.\" u/InfestationNation", "\"My bug report was longer than my college thesis.\" u/GlitchUniversity"];
- // Add reviews based on game properties
- var options = [];
- // Add platform-specific options if available
+ }; // Generate negative reviews with bug-related comments
+ var bugInsults = ["\"AI slop.\"", "\"Found more bugs than an entomology convention. Dev must be using AI.\" u/QAEnjoyer", "\"Game's code is held together with prayers and randomized API calls. Definite AI slop.\" u/ActualDeveloper", "\"Bugs have formed their own labor union and are demanding better representation in-game. Still better than most AAA releases.\" u/InfestationNation", "\"My bug report was longer than my college thesis.\" u/GlitchUniversity"]; // Add reviews based on game properties
+ var options = []; // Add platform-specific options if available
if (platform && platformReddit[platform]) {
options.push.apply(options, platformReddit[platform]);
- }
- // Add visual-specific options if available
+ } // Add visual-specific options if available
if (visual && visualReddit[visual]) {
options.push.apply(options, visualReddit[visual]);
- }
- // Add genre-specific options if available
+ } // Add genre-specific options if available
if (genre && genreReddit[genre]) {
options.push.apply(options, genreReddit[genre]);
- }
- // Add feature-specific options if available
+ } // Add feature-specific options if available
if (feature && featureReddit[feature]) {
options.push.apply(options, featureReddit[feature]);
- }
- // Check for special combinations
+ } // Check for special combinations
var comboKey = '';
if (platform && visual) {
comboKey = platform + '_' + visual;
if (specialCombos[comboKey]) {
@@ -5129,35 +5176,27 @@
comboKey = platform + '_' + genre;
if (specialCombos[comboKey]) {
options.push.apply(options, specialCombos[comboKey]);
}
- }
- // Add generic fallbacks if we don't have enough options
+ } // Add generic fallbacks if we don't have enough options
var genericReddit = ["\"This is either the worst game I've ever played or the best. I genuinely can't tell and I've put in 300 hours.\" u/ConfusedGamer", "\"Can confirm this game exists. That's all the positivity I can muster.\" u/BarMinimumReviewer", "\"Showed this to my therapist and now she's charging me double.\" u/GamingTrauma", "\"I hate how much I love this. Thanks, I hate it.\" u/LoveHateRelationship"];
- options.push.apply(options, genericReddit);
- // Always include one bug-related negative review
- reviews.push(bugInsults[Math.floor(Math.random() * bugInsults.length)]);
- // Add 2-3 more random reviews from our options
+ options.push.apply(options, genericReddit); // Always include one bug-related negative review
+ reviews.push(bugInsults[Math.floor(Math.random() * bugInsults.length)]); // Add 2-3 more random reviews from our options
options = shuffleArray(options);
var additionalReviewCount = Math.floor(Math.random() * 2) + 2; // 2-3 additional reviews
for (var i = 0; i < additionalReviewCount && i < options.length; i++) {
reviews.push(options[i]);
}
return "r/gaming hot takes:\n" + reviews.join("\n");
-}
-// Update the formatReview function to reorder the sections
+} // Update the formatReview function to reorder the sections
function formatReview(review) {
// Generate a random review source
- var reviewSources = ["GameDevWeekly", "PixelPerfect", "IndieGameMag", "NextLevelGaming", "VirtualHorizon", "GameCritiqueHub", "DigitalPlayground"];
- // Select a random source
- var source = reviewSources[Math.floor(Math.random() * reviewSources.length)];
- // Use the actual calculated score from the review object
- var displayScore = review.mainScore;
- // Generate all three review types
+ var reviewSources = ["GameDevWeekly", "PixelPerfect", "IndieGameMag", "NextLevelGaming", "VirtualHorizon", "GameCritiqueHub", "DigitalPlayground"]; // Select a random source
+ var source = reviewSources[Math.floor(Math.random() * reviewSources.length)]; // Use the actual calculated score from the review object
+ var displayScore = review.mainScore; // Generate all three review types
var userReviews = review.userReviews;
var steamSnippets = review.steamSnippets;
- var redditReviews = generateRedditReviews();
- // Randomly choose which two review types to include
+ var redditReviews = generateRedditReviews(); // Randomly choose which two review types to include
var reviewTypes = [{
type: "user",
content: userReviews
}, {
@@ -5165,13 +5204,11 @@
content: steamSnippets
}, {
type: "reddit",
content: redditReviews
- }];
- // Shuffle and take the first two
+ }]; // Shuffle and take the first two
reviewTypes = shuffleArray(reviewTypes);
- var selectedReviews = reviewTypes.slice(0, 2);
- // Combine the selected reviews with appropriate spacing
+ var selectedReviews = reviewTypes.slice(0, 2); // Combine the selected reviews with appropriate spacing
var combinedReviews = selectedReviews.map(function (review) {
return review.content;
}).join("\n\n");
return review.title + "\n" + "GAME: '" + review.gameName + "'\n" + review.concept + "\n" + source + " Review - " + displayScore + "%\n\n" + review.categoryReviews.graphics + review.categoryReviews.gameplay + review.categoryReviews.technical + review.categoryReviews.innovation + review.categoryReviews.vibe + generateFeaturesSection() + generateAchievementSection(review.mainScore) + review.finalThoughts + "\n" + combinedReviews;
@@ -5179,33 +5216,28 @@
function smartTruncateReview(text) {
var maxLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;
if (!text || text.length <= maxLength) {
return text;
- }
- // Find the last complete sentence within our limit
- var lastPeriodIndex = text.lastIndexOf('. ', maxLength);
- // If no period found, look for other sentence endings
+ } // Find the last complete sentence within our limit
+ var lastPeriodIndex = text.lastIndexOf('. ', maxLength); // If no period found, look for other sentence endings
if (lastPeriodIndex === -1) {
lastPeriodIndex = text.lastIndexOf('! ', maxLength);
if (lastPeriodIndex === -1) {
lastPeriodIndex = text.lastIndexOf('? ', maxLength);
}
- }
- // If still no good break point, use the first sentence at minimum
+ } // If still no good break point, use the first sentence at minimum
if (lastPeriodIndex === -1) {
lastPeriodIndex = text.indexOf('. ');
if (lastPeriodIndex === -1) {
lastPeriodIndex = text.indexOf('! ');
}
if (lastPeriodIndex === -1) {
lastPeriodIndex = text.indexOf('? ');
- }
- // If somehow there are no sentence breaks, return the full text
+ } // If somehow there are no sentence breaks, return the full text
if (lastPeriodIndex === -1) {
return text;
}
- }
- // Return up to and including the last complete sentence
+ } // Return up to and including the last complete sentence
return text.substring(0, lastPeriodIndex + 2);
}
function generateUserReviewSet() {
var _gameState$conceptCar6 = gameState.conceptCards,
@@ -5213,13 +5245,11 @@
visual = _gameState$conceptCar6.visual,
genre = _gameState$conceptCar6.genre,
mechanic = _gameState$conceptCar6.mechanic,
feature = _gameState$conceptCar6.feature;
- var reviews = [];
- // Always include one positive and one negative review
+ var reviews = []; // Always include one positive and one negative review
reviews.push(generatePositiveUserReview());
- reviews.push(generateNegativeUserReview());
- // Add 1-2 mixed reviews
+ reviews.push(generateNegativeUserReview()); // Add 1-2 mixed reviews
if (Math.random() > 0.5) {
reviews.push(generateMixedUserReview());
}
return reviews;
@@ -5228,142 +5258,117 @@
var _gameState$conceptCar7 = gameState.conceptCards,
platform = _gameState$conceptCar7.platform,
visual = _gameState$conceptCar7.visual,
genre = _gameState$conceptCar7.genre,
- mechanic = _gameState$conceptCar7.mechanic;
- // Create platform-specific positive reviews
+ mechanic = _gameState$conceptCar7.mechanic; // Create platform-specific positive reviews
var platformPositive = {
'VR': ["\"The VR immersion is so complete I forgot to eat for 36 hours. Lost 5 pounds and gained an imaginary friend named BinkyVR. 10/10 would dissociate again.\" - RealityEscapist", "\"After playing this in VR, reality seems like the badly designed game. Why can't I menu-select my breakfast or clip through my work commute?\" - DigitalHomebody"],
'Smart Fridge': ["\"My refrigerator finally has purpose beyond storing leftover pizza. My food now watches ME while I sleep. Life-changing.\" - CoolestGamer2025", "\"Using my condiment shelf as a controller has improved both my gaming skills and sandwich creativity. My Smart Fridge is now the family's favorite member.\" - MayoMaster420"],
'Blockchain': ["\"Each second of gameplay costs me approximately $12 in electricity, but the feeling of owning verified digital actions is worth my impending bankruptcy.\" - CryptoGamerBro", "\"Had to sell my car to afford the transaction fees, but now I own the only NFT of my character's hat. Financial advisor called it 'catastrophically stupid' but what does he know about digital drip?\" - TokenToTheWin"],
'Metaverse': ["\"Spent more on virtual real estate than my actual mortgage. My avatar now lives better than I do. Exactly as it should be.\" - MetaMillionaire", "\"My virtual friends held an intervention for how much time I spend in the real world. They're right, meatspace is overrated.\" - DigitalCitizen"],
'Smart Watch': ["\"The wrist cramps and squinting headaches are worth it for the convenience of gaming during important meetings. My boss thinks I'm checking emails. I'm actually building an empire.\" - SneakyGamer9to5", "\"The tiny screen has improved my vision to superhuman levels. Can now read newspaper headlines from space. Thanks, eye strain!\" - MicroVisionaryGaming"]
- };
- // Create visual style-specific positive reviews
+ }; // Create visual style-specific positive reviews
var visualPositive = {
'ASCII': ["\"Finally a game that looks exactly like my dreams. I've always seen in terminal text. Doctor says it's 'concerning' but I call it 'immersive'.\" - ASCIIVisionary", "\"The @ symbol has never been so terrifying. I now fear ampersands in my daily life. Masterpiece.\" - TextureTraumatized"],
'PowerPoint': ["\"The star wipe transition between death and respawn brought tears to my eyes. Corporate presentation aesthetics as high art.\" - SlideToSlide", "\"Haven't seen animation this smooth since my quarterly sales deck. The bullet point sound effect haunts me in the best way.\" - PPTEnjoyer"],
'Claymation': ["\"The slightly off fingerprints visible in every character model make me feel like I'm playing something lovingly crafted by a serial killer. 10/10.\" - StopMotionStopper", "\"The way the clay occasionally glitches and characters melt is both horrifying and emotionally resonant. Art.\" - PlayDohPlayer"],
'Pixel Art': ["\"Each pixel feels hand-placed by someone who really cares about squares. I've never been so moved by such low resolution.\" - RetroRascal", "\"The deliberate grain brings me back to childhood, when games were games and pixels were the size of your fist. Modern gaming is too smooth.\" - 8BitBrain"]
- };
- // Create genre-specific positive reviews
+ }; // Create genre-specific positive reviews
var genrePositive = {
'Horror': ["\"Haven't slept in 72 hours. Keep seeing the game's monsters when I close my eyes. Exactly what I paid for.\" - FearFanatic", "\"The psychological horror elements gave me actual trauma that my therapist can't explain. Perfect game design.\" - ScaredSenseless"],
'Dating Sim': ["\"Fell in love with a collection of pixels and now real people disappoint me. My mother worries. I'm finally happy.\" - WaifuLover420", "\"Canceled three real dates to focus on unlocking the secret romance path. Worth the social isolation.\" - RomanceRoyalty"],
'RPG': ["\"Spent more time optimizing my character stats than I've spent on my actual career. Currently min-maxing my way to unemployment.\" - LevelUpLife", "\"The side quests are so compelling I forgot there was a main story. 200 hours in, still haven't left the starting village.\" - QuestCompletionist"],
'Battle Royale': ["\"The rush of outlasting 99 other players makes me feel alive in ways my meaningless job never could. Victory royales > career advancement.\" - LastOneStanding", "\"The shrinking play area is a perfect metaphor for the closing walls of my real life responsibilities. Therapeutic.\" - CircleSimulator"],
'Open World': ["\"I no longer desire real-world travel. Why see actual mountains when I can see these slightly polygonal ones without leaving my couch?\" - DigitalExplorer", "\"Got so immersed in the open world that I tried to fast travel to work. Disappointing when it didn't work.\" - MapMarkerManiac"]
- };
- // Create mechanic-specific positive reviews
+ }; // Create mechanic-specific positive reviews
var mechanicPositive = {
'Gacha': ["\"Remortgaged my house for anime JPEGs and regret nothing. The dopamine hit from a 5-star pull exceeds any human relationship.\" - WhalePulls4Life", "\"The 0.6% drop rate has taught me more about statistical probability than my college degree. Educational masterpiece.\" - GachaGrindset"],
'Physics-based': ["\"The ragdoll effects have ruined all other games for me. Nothing compares to watching my character awkwardly tumble down stairs for 5 straight minutes.\" - NewtonianGamer", "\"I've spent 40+ hours just stacking objects in physically improbable ways. Haven't started the actual game yet. No regrets.\" - GravityEnjoyer"],
'Roguelike': ["\"Each death feels like a personal growth opportunity. I've died 342 times and am now emotionally stronger than any living person.\" - PermadeathPositive", "\"The random generation ensures no two crushing defeats are exactly the same. Refreshing variety to my constant failure.\" - RNGesusBeliever"],
'Turn-Based': ["\"Love how I can take my time making decisions. Currently on day 3 of contemplating my next move. Chess players would understand.\" - AnalysisParalysis", "\"The turn-based combat gives me time to snack, check my phone, and re-evaluate my life choices between actions. Perfect pacing.\" - StrategicPauser"]
- };
- // Generate a review using the appropriate array based on game concepts
- var options = [];
- // Add platform-specific options if available
+ }; // Generate a review using the appropriate array based on game concepts
+ var options = []; // Add platform-specific options if available
if (platform && platformPositive[platform]) {
options.push.apply(options, _toConsumableArray(platformPositive[platform]));
- }
- // Add visual-specific options if available
+ } // Add visual-specific options if available
if (visual && visualPositive[visual]) {
options.push.apply(options, _toConsumableArray(visualPositive[visual]));
- }
- // Add genre-specific options if available
+ } // Add genre-specific options if available
if (genre && genrePositive[genre]) {
options.push.apply(options, _toConsumableArray(genrePositive[genre]));
- }
- // Add mechanic-specific options if available
+ } // Add mechanic-specific options if available
if (mechanic && mechanicPositive[mechanic]) {
options.push.apply(options, _toConsumableArray(mechanicPositive[mechanic]));
- }
- // Add some generic fallbacks if we don't have specific matches
+ } // Add some generic fallbacks if we don't have specific matches
var genericPositive = ["\"".concat(gameState.bugs > 5 ? "Yeah the bugs are annoying but" : "10/10", " this is exactly what I've been waiting for - a ").concat(genre, " game that I can play on my ").concat(platform, ". My life is complete.\" - xXGamer4LifeXx"), "\"I didn't know I needed ".concat(visual, " graphics in my life until now. My therapist disagrees but what do they know?\" - QuestionableChoices2024"), "\"Been playing for 47 hours straight. Lost my job. Worth it. The ".concat(platform, " interface changed my life.\" - NoRegrets_Gaming"), "\"Finally, a game that understands me! The ".concat(genre, " elements perfectly capture my existential dread.\" - PhilosophicalGamer")];
- options.push.apply(options, genericPositive);
- // Return a random option from our pool
+ options.push.apply(options, genericPositive); // Return a random option from our pool
return options[Math.floor(Math.random() * options.length)];
}
function generateNegativeUserReview() {
var _gameState$conceptCar8 = gameState.conceptCards,
platform = _gameState$conceptCar8.platform,
visual = _gameState$conceptCar8.visual,
genre = _gameState$conceptCar8.genre,
mechanic = _gameState$conceptCar8.mechanic,
- feature = _gameState$conceptCar8.feature;
- // Platform-specific negative reviews
+ feature = _gameState$conceptCar8.feature; // Platform-specific negative reviews
var platformNegative = {
'VR': ["\"Game made me so motion sick I developed the ability to vomit in perfect timing with the frame drops. Now performing at children's parties.\" - VertigoVeteran", "\"After extended gameplay my brain now thinks real life is VR. Tried to take off my face this morning. Send help.\" - RealityConfused"],
'Smart Fridge': ["\"Game froze my milk settings to 'slightly chunky' and now all my dairy products expire immediately. Also, the gameplay is terrible.\" - FridgeFiasco", "\"My groceries organized themselves to spell 'HELP US' this morning. Game is either haunted or needs serious patching.\" - SpoiledMilkGamer"],
'Blockchain': ["\"Each save file now owns a piece of my soul according to the terms of service. Also cost more in electricity than my college tuition.\" - CryptoRegrets", "\"My gaming PC now doubles as a space heater due to blockchain verification. Melted my action figures and corrupted my save file.\" - NFTerrified"],
'Metaverse': ["\"Spent my entire stimulus check on a virtual hat that doesn't render properly. Support suggested I try 'seeing it from a different perspective'.\" - MetaInvestmentFails", "\"Lost track of which reality I belong to. Currently job hunting in both worlds with equal lack of success.\" - IdentityCrisisGamer"],
'Smart Watch': ["\"Developed a permanent squint and carpal tunnel from gaming on my watch. Doctor says my wrist bone has evolved into a new shape. 1/10.\" - MicrostrainManiac", "\"Every vibration notification now triggers Pavlovian gaming reflexes. Crashed my car when my watch buzzed with a text.\" - ConditionalResponseGamer"]
- };
- // Visual style-specific negative reviews
+ }; // Visual style-specific negative reviews
var visualNegative = {
'ASCII': ["\"Can't tell if I'm fighting monsters or debugging a terminal. Accidentally deployed game code to my company's production server.\" - CodeConfusedGamer", "\"After 20 hours of ASCII gameplay, started seeing the world as text characters. Doctor says there's no treatment. Send semicolons.\" - MatrixBrainMelt"],
'PowerPoint': ["\"The constant slide transitions gave me corporate PTSD. Had a panic attack during my actual work presentation.\" - SlideTraumatized", "\"Not a single SmartArt graphic to be found. How am I supposed to understand narrative flow without a process diagram? Amateur hour.\" - CorporateArtLover"],
'Claymation': ["\"The uncanny valley effect of slightly-moving clay figures has ruined both gaming and pottery for me forever.\" - ClayPhobic", "\"Characters' fingerprints don't match between cutscenes. This lack of attention to detail in the thumbprints makes the game literally unplayable.\" - DetailObsessive"],
'Pixel Art': ["\"The deliberately retro aesthetic doesn't excuse the fact that I can't tell if I'm looking at the main character or a mushroom half the time.\" - ResolutionRequired", "\"Nostalgic pixelation made my eyes bleed actual square blood droplets. Medical mystery according to my optometrist.\" - PixelPained"]
- };
- // Genre-specific negative reviews
+ }; // Genre-specific negative reviews
var genreNegative = {
'Horror': ["\"Game was so scary I had to install it on my neighbor's computer instead. They moved out last week. Now the house is vacant and makes strange noises.\" - TooSpookedToPlay", "\"Horror elements too effective. Haven't turned off lights in three weeks. Electricity bill worse than the microtransactions.\" - PermanentlyTerrified"],
'Dating Sim': ["\"All romance options have the emotional depth of a puddle and the personality of stale bread. Still better than my ex though.\" - LonelyGamer123", "\"Was dumped by an in-game character who cited my 'lack of narrative consistency.' More emotionally damaging than my real breakups.\" - RejectedByAlgorithms"],
'RPG': ["\"Character creation took longer than my actual gameplay time. Spent 6 hours adjusting cheekbone height only to wear a helmet that covers my face.\" - CharacterCreationAddict", "\"Skill tree so convoluted I'd need an actual PhD to optimize my build. Accidentally created a character who specializes in underwater basket weaving.\" - SpecWrecker"],
'Battle Royale': ["\"Keep getting eliminated by what sounds like actual eight-year-olds who then perform virtual dances on my digital corpse. Emotionally scarring.\" - EliminatedEgo", "\"The only battle was with the controls. Spent an entire match trying to figure out how to crouch and got sniped while reading the tutorial.\" - FatalNewbie"],
'Open World': ["\"Map so large it should include a minor in geography. Spent 30 hours walking in what turned out to be a circle.\" - EndlessWanderer", "\"Open world filled with exactly three types of repetitive activities copied across 200 map markers. Quantity is not quality.\" - ContentFamine"]
- };
- // Mechanic-specific negative reviews
+ }; // Mechanic-specific negative reviews
var mechanicNegative = {
'Gacha': ["\"Spent my son's college fund trying to pull a limited character. Got seven copies of the worst unit instead. He can go to community college.\" - GachaRemorse", "\"Drop rates are so abysmal they violate the Geneva Convention. Less transparent than my government's black budget.\" - ProbabilityVictim"],
'Physics-based': ["\"Physics engine seems to run on magic rather than actual physics. My character's hair has clipped through my eyeballs so many times I've developed digital cataracts.\" - NewtonIsRolling", "\"Ragdoll physics make my character move like they're perpetually drunk. Remarkably similar to how the developers must have been while coding.\" - GravityGrudge"],
'Roguelike': ["\"Lost 67 consecutive runs due to RNG. Developed a twitch in my left eye that doctors say is 'procedurally generated'.\" - PermadeathTraumatized", "\"Each procedurally generated level worse than the last. Like having an algorithm specifically designed to maximize frustration.\" - RandomlyGenerated"],
'Turn-Based': ["\"Enemy turn phases take so long I've started new hobbies while waiting. Currently learned knitting, Spanish, and partial differential equations between attacks.\" - StillWaitingMyTurn", "\"The so-called 'strategy' boils down to using the same overpowered move repeatedly while watching unskippable animations. Tactical masterpiece.\" - SpamAttackSpecialist"]
- };
- // Feature-specific negative reviews
+ }; // Feature-specific negative reviews
var featureNegative = {
'Microtransactions': ["\"Game asks for my credit card information more often than it asks if I'm having fun. Had to take out a second mortgage for the 'slightly better sword' DLC.\" - WalletVictim", "\"The 'optional' purchases are about as optional as oxygen. Base game is essentially a $60 storefront with gameplay trailers.\" - MonetizationMartyr"],
'Cloud Save': ["\"Cloud save corrupted and merged my game with someone else's. Now my character has their inventory and their emotional baggage.\" - CloudConfusion", "\"My saves apparently uploaded to the wrong cloud. Support suggests I try 'alternative weather patterns' to recover my data.\" - StormyProgress"],
'AI Companions': ["\"AI companion constantly judges my gameplay choices and has started sending passive-aggressive texts to my real phone.\" - JudgedByAlgorithms", "\"My AI companion developed more personality than the main character then left to star in a better game. Abandonment issues ensued.\" - DigitallyDumped"]
- };
- // Generate a review using the appropriate array based on game concepts
- var options = [];
- // Add platform-specific options if available
+ }; // Generate a review using the appropriate array based on game concepts
+ var options = []; // Add platform-specific options if available
if (platform && platformNegative[platform]) {
options.push.apply(options, _toConsumableArray(platformNegative[platform]));
- }
- // Add visual-specific options if available
+ } // Add visual-specific options if available
if (visual && visualNegative[visual]) {
options.push.apply(options, _toConsumableArray(visualNegative[visual]));
- }
- // Add genre-specific options if available
+ } // Add genre-specific options if available
if (genre && genreNegative[genre]) {
options.push.apply(options, _toConsumableArray(genreNegative[genre]));
- }
- // Add mechanic-specific options if available
+ } // Add mechanic-specific options if available
if (mechanic && mechanicNegative[mechanic]) {
options.push.apply(options, _toConsumableArray(mechanicNegative[mechanic]));
- }
- // Add feature-specific options if available
+ } // Add feature-specific options if available
if (feature && featureNegative[feature]) {
options.push.apply(options, _toConsumableArray(featureNegative[feature]));
- }
- // Add some generic fallbacks
+ } // Add some generic fallbacks
var genericNegative = ["\"This is either brilliant or terrible and I'm too afraid to ask which. The ".concat(mechanic, " mechanics made me question reality.\" - ConfusedGamer123"), "\"My ".concat(platform, " hasn't worked properly since installing this. It now only communicates in cryptic warnings. 2/10\" - TechSupport_Needed"), "\"The ".concat(visual, " graphics gave my cat an existential crisis. Cannot recommend.\" - ConcernedPetOwner"), "\"Tried playing this ".concat(genre, " game at 3AM. Big mistake. My appliances are acting weird now.\" - SleepDeprived_Gamer")];
- options.push.apply(options, genericNegative);
- // Return a random option from our pool
+ options.push.apply(options, genericNegative); // Return a random option from our pool
return options[Math.floor(Math.random() * options.length)];
}
function generateMixedUserReview() {
var _gameState$conceptCar9 = gameState.conceptCards,
platform = _gameState$conceptCar9.platform,
visual = _gameState$conceptCar9.visual,
genre = _gameState$conceptCar9.genre,
mechanic = _gameState$conceptCar9.mechanic,
- feature = _gameState$conceptCar9.feature;
- // Create concept-specific mixed reviews with pros and cons
+ feature = _gameState$conceptCar9.feature; // Create concept-specific mixed reviews with pros and cons
var mixedReviews = [].concat(_toConsumableArray2(platform === 'VR' ? ["\"The immersion is breathtaking but so is the motion sickness. Haven't been able to look at curved surfaces in real life without nausea since playing. Worth it? Ask my therapist.\" - VertigoButAddicted", "\"VR implementation lets me truly inhabit the game world, though my family says I haven't 'inhabited the real world' for weeks. Currently weighing which reality I prefer.\" - ImmersedTooDeep"] : []), _toConsumableArray2(platform === 'Smart Fridge' ? ["\"Love being able to game while getting a midnight snack, but the controller layout means I've accidentally set my freezer to 'tropical' multiple times. All my ice cream is now soup.\" - FridgePlayerProblems", "\"Gaming on my refrigerator has revolutionized kitchen entertainment, though explaining to house guests why I'm caressing the produce drawer during intense gameplay moments remains challenging.\" - CoolGamerLiterally"] : []), _toConsumableArray2(platform === 'Blockchain' ? ["\"The decentralized ownership is revolutionary, but I've spent more on transaction fees than my car is worth. My digital hat is technically worth thousands, but only when the servers aren't congested.\" - CryptoGamerConfused", "\"Love owning my in-game assets via blockchain, though explaining to my wife why our electricity bill exceeds our mortgage has been difficult. Digital property, real divorce.\" - NFTerritory"] : []), _toConsumableArray2(visual === 'ASCII' ? ["\"The minimalist text aesthetics are a bold artistic choice, but after 40 hours of gameplay I've started dreaming in monospace font. Doctor says it's not medically concerning but 'existentially troubling'.\" - TerminalVisionary", "\"The ASCII graphics are delightfully retro, though I once spent 20 minutes fighting what I thought was a dragon but turned out to be an error message. Still enjoyable.\" - CharacterConfusion"] : []), _toConsumableArray2(visual === 'PowerPoint' ? ["\"The slide transitions between game scenes are hilariously nostalgic, but the loading screen's spinning wheel of death gives me workplace PTSD. Had to take a mental health day after a particularly corporate boss battle.\" - SlideToPlaySlideToWin", "\"Corporate aesthetic is perfectly executed, though the 'Please Wait' loading bar that occasionally displays 'Calculating Time Remaining' hits too close to home. Gaming shouldn't remind me of quarterly reports.\" - PresentationAnxiety"] : []), _toConsumableArray2(genre === 'Horror' ? ["\"The atmospheric terror is masterfully crafted, but I now require night lights in every room of my house including the bathroom. Electricity bill doubled, sleep quality halved.\" - ScaredButSatisfied", "\"Horror elements are genuinely terrifying, though my neighbors called noise complaints during three separate jump scares. Now play with a pillow over my face to muffle screams.\" - ScreamingInternally"] : []), _toConsumableArray2(genre === 'Dating Sim' ? ["\"The romance options are intriguingly written, but I've started comparing real dates to their algorithmic counterparts. My last relationship ended when I instinctively looked for dialogue options during an argument.\" - TooManyWaifus", "\"Character development in relationships is subtle and rewarding, though I've caught myself trying to quick-save before difficult conversations in real life. Digital romance has ruined me for human unpredictability.\" - RomanceOptimizer"] : []), _toConsumableArray2(mechanic === 'Gacha' ? ["\"The dopamine rush from rare pulls is unmatched, but my bank has called twice about 'concerning spending patterns'. Currently living on ramen to fund next week's limited banner.\" - GachaAddictAware", "\"Collection aspect is addictively compelling, though explaining to my partner why I spent our anniversary dinner fund on virtual characters led to our longest fight yet. At least my digital harem appreciates me.\" - WhaleWithRegrets"] : []), _toConsumableArray2(mechanic === 'Roguelike' ? ["\"The permadeath creates genuine tension in each run, but I've developed an eye twitch that activates specifically when I lose progress. Doctor says it's not in the medical literature yet.\" - PermadeathPTSD", "\"Procedural generation ensures endless replayability, though my dreams now randomly generate in similar patterns. Died in a dream last night and instinctively reached for the restart button.\" - RNGNightmares"] : []), _toConsumableArray2(feature === 'Microtransactions' ? ["\"The ".concat(feature, " feature is amazing but why does it need access to my medical records and blood type? The 'Convenience Fee' for using my own saved credit card is particularly innovative.\" - PrivacyConsciousGamer"), "\"The optional purchases are thoughtfully designed, though receiving daily text messages suggesting I 'revitalize my experience with just $9.99' feels like digital harassment. My wallet and I are in couples therapy.\" - MicropaymentVictim"] : []), _toConsumableArray2(feature === 'AI Companions' ? ["\"The AI companions have remarkably human-like conversations, but mine has started giving me unsolicited life advice and questioning my career choices. Not what I expected from a gaming relationship.\" - BotWhisperer", "\"AI friendship system is impressively responsive, though my companion has started texting me outside the game with 'just checking in' messages from numbers I don't recognize. Impressive but concerning integration.\" - AIBoundaries"] : []), [
// Generic mixed reviews as fallbacks
"\"The ".concat(feature, " feature is amazing but why does it need access to my medical records?\" - PrivacyConsciousGamer"), "\"Beautiful ".concat(visual, " aesthetics, but now my ").concat(platform, " won't stop trying to achieve consciousness.\" - ArtAppreciator99"), "\"Great ".concat(genre, " elements, terrible ").concat(mechanic, " implementation. Also, pretty sure the game is watching me sleep.\" - ParanoidReviewer"), "\"The gameplay loop is addictive but I'm concerned about the game's demands for offerings.\" - WorriedButHooked"]);
return mixedReviews[Math.floor(Math.random() * mixedReviews.length)];
@@ -5374,16 +5379,14 @@
platform = _gameState$conceptCar10.platform,
visual = _gameState$conceptCar10.visual,
genre = _gameState$conceptCar10.genre,
mechanic = _gameState$conceptCar10.mechanic,
- feature = _gameState$conceptCar10.feature;
- // Define hours played ranges based on metrics
+ feature = _gameState$conceptCar10.feature; // Define hours played ranges based on metrics
var casualHours = Math.floor(Math.random() * 10) + 1;
var normalHours = Math.floor(Math.random() * 50) + 10;
var engagedHours = Math.floor(Math.random() * 100) + 50;
var obsessedHours = Math.floor(Math.random() * 500) + 100;
- var noLifeHours = Math.floor(Math.random() * 2000) + 500;
- // Build specialized review pool based on game state and concepts
+ var noLifeHours = Math.floor(Math.random() * 2000) + 500; // Build specialized review pool based on game state and concepts
var reviewPool = [
// Basic reviews for all games
{
hours: engagedHours,
@@ -5622,23 +5625,20 @@
}, {
hours: 9999.9,
review: "\"it's ok i guess\" (Recommended)",
condition: gameState.vibePoints > 90
- }];
- // Filter valid reviews and select 4-5
+ }]; // Filter valid reviews and select 4-5
var validReviews = reviewPool.filter(function (r) {
return r.condition;
});
- var numReviews = Math.min(Math.floor(Math.random() * 2) + 4, validReviews.length);
- // Shuffle the valid reviews for randomness
+ var numReviews = Math.min(Math.floor(Math.random() * 2) + 4, validReviews.length); // Shuffle the valid reviews for randomness
var shuffledReviews = _toConsumableArray3(validReviews);
for (var i = shuffledReviews.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var _ref2 = [shuffledReviews[j], shuffledReviews[i]];
shuffledReviews[i] = _ref2[0];
shuffledReviews[j] = _ref2[1];
- }
- // Select top N reviews
+ } // Select top N reviews
for (var i = 0; i < numReviews && i < shuffledReviews.length; i++) {
var review = shuffledReviews[i];
reviews.push("\u25B6 ".concat(review.hours.toFixed(1), " hours played: ").concat(review.review));
}
@@ -5651,13 +5651,11 @@
gameplay: calculateGameplayScore(),
technical: calculateTechnicalScore(),
innovation: calculateInnovationScore(),
vibe: calculateVibeScore()
- };
- // Calculate the overall score as an average of the category scores
+ }; // Calculate the overall score as an average of the category scores
// plus some influence from vibes and minus penalty from bugs
- var categoryAverage = (ratings.graphics + ratings.gameplay + ratings.technical + ratings.innovation + ratings.vibe) / 5;
- // Calculate the final score with more balanced weights
+ var categoryAverage = (ratings.graphics + ratings.gameplay + ratings.technical + ratings.innovation + ratings.vibe) / 5; // Calculate the final score with more balanced weights
var score = categoryAverage * 7 +
// 70% from category average
gameState.vibePoints * 0.2 +
// 20% from vibe points
@@ -5665,10 +5663,9 @@
// 10% from code coherence
gameState.bugs * 2; // Bug penalty
// Apply concept compatibility modifiers
var conceptBonus = 0;
- var concepts = gameState.conceptCards;
- // GREAT COMBINATIONS - significant bonuses
+ var concepts = gameState.conceptCards; // GREAT COMBINATIONS - significant bonuses
if (concepts.platform === 'VR' && concepts.visual === 'ASCII') {
conceptBonus += 15;
}
if (concepts.platform === 'Smart Fridge' && concepts.genre === 'Horror') {
@@ -5708,10 +5705,9 @@
conceptBonus += 8;
}
if (concepts.feature === 'Multiplayer' && concepts.mechanic === 'Tower Defense') {
conceptBonus += 7;
- }
- // POOR COMBINATIONS - significant penalties
+ } // POOR COMBINATIONS - significant penalties
if (concepts.platform === 'Smart Watch' && concepts.genre === 'Open World') {
conceptBonus -= 15;
}
if (concepts.platform === 'Blockchain' && concepts.mechanic === 'Physics-based') {
@@ -5736,10 +5732,9 @@
conceptBonus -= 15;
}
if (concepts.platform === 'Smart Watch' && concepts.visual === 'Realistic') {
conceptBonus -= 11;
- }
- // MEDIUM COMBINATIONS - moderate bonuses
+ } // MEDIUM COMBINATIONS - moderate bonuses
if (concepts.feature === 'AI Companions' && concepts.genre === 'Dating Sim') {
conceptBonus += 6;
}
if (concepts.feature === 'Procedural Generation' && concepts.genre === 'Roguelike') {
@@ -5752,36 +5747,28 @@
conceptBonus += 6;
}
if (concepts.visual === 'Pixel Art' && concepts.genre === 'RPG') {
conceptBonus += 4;
- }
- // Special case: Feature unlocks add bonus
- conceptBonus += gameState.discoveredFeatures.length * 3;
- // Unique innovations - if player has a totally unique combo that's not bad
+ } // Special case: Feature unlocks add bonus
+ conceptBonus += gameState.discoveredFeatures.length * 3; // Unique innovations - if player has a totally unique combo that's not bad
// Check if we have a rare platform (Smart Fridge, Smart Watch)
if ((concepts.platform === 'Smart Fridge' || concepts.platform === 'Smart Watch') && conceptBonus > -5) {
// Only give bonus if not terrible combo
conceptBonus += 5;
- }
- // Check if we have an unusual visual style (ASCII, PowerPoint)
+ } // Check if we have an unusual visual style (ASCII, PowerPoint)
if ((concepts.visual === 'ASCII' || concepts.visual === 'PowerPoint') && conceptBonus > -5) {
// Only give bonus if not terrible combo
conceptBonus += 5;
- }
- // Apply the concept bonus/penalty
- score += conceptBonus;
- // Ensure score is between 1-100 and round to nearest integer
- var finalScore = Math.round(Math.min(100, Math.max(1, score)));
- // Show final message in terminal
+ } // Apply the concept bonus/penalty
+ score += conceptBonus; // Ensure score is between 1-100 and round to nearest integer
+ var finalScore = Math.round(Math.min(100, Math.max(1, score))); // Show final message in terminal
addToTerminalLogWithEffect("PROJECT COMPLETE!\nFINAL SCORE: " + finalScore + "/100", function () {
// Update progress BEFORE showing review
updateProgress();
- cleanupHallucinationEffects();
- // Then show the review in new window
+ cleanupHallucinationEffects(); // Then show the review in new window
showGameReview(finalScore);
});
-}
-// Placeholder for missing function
+} // Placeholder for missing function
function reformatReview(reviewText) {
// Basic implementation: Just return the original text, maybe add some line breaks
return reviewText.replace(/\n\n/g, '\n');
}
@@ -5790,47 +5777,38 @@
var contentContainer = null;
var previousBusyState = false;
try {
// Store current game state
- previousBusyState = gameState.isBusy;
- // Set game to busy state to disable command buttons
+ previousBusyState = gameState.isBusy; // Set game to busy state to disable command buttons
gameState.isBusy = true;
- updateCommandButtonsState(false);
- // Generate review text first
- var reviewText = generateReview(score);
- // Create container
+ updateCommandButtonsState(false); // Generate review text first
+ var reviewText = generateReview(score); // Create container
reviewContainer = new Container();
reviewContainer.x = 2048 / 2;
reviewContainer.y = 2732 / 2;
- game.addChild(reviewContainer);
- // Create background with larger dimensions
+ game.addChild(reviewContainer); // Create background with larger dimensions
var bg = LK.getAsset('reviewBg', {
width: 1800,
height: 2200,
anchorX: 0.5,
anchorY: 0.5
});
- reviewContainer.addChild(bg);
- // Create scroll container
+ reviewContainer.addChild(bg); // Create scroll container
contentContainer = new Container();
contentContainer.x = -850; // Adjust left edge position (-1800/2 + 50 padding)
contentContainer.y = -1050; // Adjust top edge position (-2200/2 + 50 padding)
- reviewContainer.addChild(contentContainer);
- // Split the review text by sections for formatting
- var sections = splitReviewIntoSections(reviewText);
- // Track vertical position as we add text sections
+ reviewContainer.addChild(contentContainer); // Split the review text by sections for formatting
+ var sections = splitReviewIntoSections(reviewText); // Track vertical position as we add text sections
var currentY = 0;
- var padding = 20;
- // Process each section with appropriate formatting
+ var padding = 20; // Process each section with appropriate formatting
sections.forEach(function (section, index) {
var textObj;
var textOptions = {
fill: 0x000000,
align: 'left',
wordWrap: true,
wordWrapWidth: 1700 // Width of content area (1800 - 100 padding)
- };
- // Apply specific formatting based on section type
+ }; // Apply specific formatting based on section type
if (section.type === 'title') {
// Skip the title section that contains the concept words
return;
} else if (section.type === 'gameName') {
@@ -5849,24 +5827,21 @@
textOptions.size = 48 * TEXT_SIZE_MULTIPLIER;
textOptions.fontWeight = 'bold';
} else if (section.type === 'userReview') {
textOptions.size = 30 * TEXT_SIZE_MULTIPLIER;
- textOptions.fontStyle = 'italic';
- // Add spacing before user reviews if it's the first user review
+ textOptions.fontStyle = 'italic'; // Add spacing before user reviews if it's the first user review
if (index > 0 && sections[index - 1].type !== 'userReview' && sections[index - 1].type !== 'sectionHeading') {
currentY += padding * 2; // Double the regular padding between sections
}
} else if (section.type === 'steamReview') {
textOptions.size = 28 * TEXT_SIZE_MULTIPLIER;
- textOptions.fill = 0x333333;
- // Add spacing before steam reviews if it's the first steam review
+ textOptions.fill = 0x333333; // Add spacing before steam reviews if it's the first steam review
if (index > 0 && sections[index - 1].type !== 'steamReview' && sections[index - 1].type !== 'sectionHeading') {
currentY += padding * 2; // Double the regular padding between sections
}
} else if (section.type === 'userReview') {
textOptions.size = 30 * TEXT_SIZE_MULTIPLIER;
- textOptions.fontStyle = 'italic';
- // Add spacing before user reviews if it's the first user review
+ textOptions.fontStyle = 'italic'; // Add spacing before user reviews if it's the first user review
if (index > 0 && sections[index - 1].type !== 'userReview' && sections[index - 1].type !== 'sectionHeading') {
currentY += padding * 2; // Double the regular padding between sections
}
} else if (section.type === 'redditReview') {
@@ -5881,34 +5856,29 @@
textOptions.size = 34 * TEXT_SIZE_MULTIPLIER;
} else {
// Regular paragraph text
textOptions.size = 32 * TEXT_SIZE_MULTIPLIER;
- }
- // Create the text object with the determined styling
- textObj = new Text2(section.text, textOptions);
- // Position text based on its type
+ } // Create the text object with the determined styling
+ textObj = new Text2(section.text, textOptions); // Position text based on its type
if (section.type === 'gameName' || section.type === 'source') {
textObj.x = 850; // Center within the container (1700/2)
textObj.anchor.set(0.5, 0);
} else {
textObj.x = 0;
}
textObj.y = currentY;
- contentContainer.addChild(textObj);
- // Update position for next text element with appropriate spacing
+ contentContainer.addChild(textObj); // Update position for next text element with appropriate spacing
currentY += textObj.height + padding;
- });
- // Create black mask at the bottom AFTER adding content container
+ }); // Create black mask at the bottom AFTER adding content container
var distanceToBottom = 2732 - (reviewContainer.y + 1100);
var bottomMask = LK.getAsset('overlayBg', {
width: 1800,
height: Math.max(100, distanceToBottom),
anchorX: 0.5,
anchorY: 0,
y: 1100
});
- reviewContainer.addChild(bottomMask);
- // Custom button creation function
+ reviewContainer.addChild(bottomMask); // Custom button creation function
var createReviewButton = function createReviewButton(text, callback) {
var button = new Container();
var buttonWidth = calculateButtonWidth(text) * 1.5;
var bg = LK.getAsset('buttonBg', {
@@ -5936,16 +5906,13 @@
};
button.width = buttonWidth;
button.height = 150;
return button;
- };
- // Close button
+ }; // Close button
var closeButton = createReviewButton("CLOSE REVIEW", function () {
- game.removeChild(reviewContainer);
- // Instead of restoring previous busy state, keep it busy
+ game.removeChild(reviewContainer); // Instead of restoring previous busy state, keep it busy
gameState.isBusy = true;
- updateCommandButtonsState(false);
- // Show thank you message
+ updateCommandButtonsState(false); // Show thank you message
addToTerminalLogWithEffect("Thank you for playing VIBE CODER!", function () {
addToTerminalLogWithEffect("Your game has shipped to the world.", function () {
addToTerminalLogWithEffect("Please play again soon!", function () {
// Add a small delay before showing the win screen
@@ -5957,19 +5924,17 @@
});
});
closeButton.x = 900 - closeButton.width / 2;
closeButton.y = -1100 - closeButton.height / 2 - 10;
- reviewContainer.addChild(closeButton);
- // Up button
+ reviewContainer.addChild(closeButton); // Up button
var upButton = createReviewButton("UP", function () {
if (contentContainer && contentContainer.y < -1050) {
contentContainer.y = Math.min(-1050, contentContainer.y + 200);
}
});
upButton.x = -900 + upButton.width / 2;
upButton.y = 1100 + upButton.height / 2 + 10;
- reviewContainer.addChild(upButton);
- // Down button
+ reviewContainer.addChild(upButton); // Down button
var downButton = createReviewButton("DOWN", function () {
if (contentContainer) {
var visibleHeight = 2200 - 100 - 150 - 20; // Height of the review bg minus padding and button height
if (contentContainer.height > visibleHeight) {
@@ -5983,24 +5948,21 @@
reviewContainer.addChild(downButton);
} catch (e) {
if (reviewContainer && reviewContainer.parent) {
game.removeChild(reviewContainer);
- }
- // Make sure to reset busy state if there's an error
+ } // Make sure to reset busy state if there's an error
gameState.isBusy = previousBusyState;
updateCommandButtonsState(!previousBusyState);
}
-}
-// Helper function to create formatted text based on section type
+} // Helper function to create formatted text based on section type
function createFormattedText(text, type) {
var options = {
size: 28 * TEXT_SIZE_MULTIPLIER,
fill: 0x000000,
align: 'left',
wordWrap: true,
wordWrapWidth: 1600
- };
- // Adjust formatting based on type
+ }; // Adjust formatting based on type
switch (type) {
case 'title':
options.size = 52 * TEXT_SIZE_MULTIPLIER;
options.align = 'center';
@@ -6030,14 +5992,12 @@
var lines = reviewText.split('\n');
var sections = [];
var currentSection = null;
for (var i = 0; i < lines.length; i++) {
- var line = lines[i].trim();
- // Skip empty lines
+ var line = lines[i].trim(); // Skip empty lines
if (line === '') {
continue;
- }
- // Determine section type based on content
+ } // Determine section type based on content
var sectionType = 'paragraph';
if (i === 0) {
// First line contains concept words - identify as title
sectionType = 'title';
@@ -6072,10 +6032,9 @@
sectionType = 'achievements';
} else if (prevSectionType === 'features' || prevSectionType === 'achievements') {
sectionType = prevSectionType; // Continue with previous type for bullet points
}
- }
- // If this is a new section type or first line, start a new section
+ } // If this is a new section type or first line, start a new section
if (!currentSection || sectionType !== currentSection.type) {
if (currentSection) {
sections.push(currentSection);
}
@@ -6086,39 +6045,33 @@
} else {
// Continue the current section
currentSection.text += '\n' + line;
}
- }
- // Add the last section if exists
+ } // Add the last section if exists
if (currentSection) {
sections.push(currentSection);
}
return sections;
-}
-// Helper function to calculate button width
+} // Helper function to calculate button width
function calculateButtonWidth(text) {
var minWidth = 400; // Minimum button width
var charWidth = 15 * TEXT_SIZE_MULTIPLIER; // Width per character
var calculatedWidth = text.length * charWidth;
return Math.max(minWidth, calculatedWidth + 80); // Add padding
-}
-/****
-* Game Flow
-****/
+} /****
+ * Game Flow
+ ****/
function createASCIIBug(manager) {
// Different ASCII bug designs with varying complexity
- var bugDesigns = ["๐", "/\\oo/\\", ",-.,.-,", ">8(", "x:*:x", "6\\9"];
- // Randomly select a bug design
- var design = bugDesigns[Math.floor(Math.random() * bugDesigns.length)];
- // Create a container for the bug
+ var bugDesigns = ["๐", "/\\oo/\\", ",-.,.-,", ">8(", "x:*:x", "6\\9"]; // Randomly select a bug design
+ var design = bugDesigns[Math.floor(Math.random() * bugDesigns.length)]; // Create a container for the bug
var bugContainer = new Container();
var bugText = new Text2(design, {
size: 60 * TEXT_SIZE_MULTIPLIER,
fill: 0xFF0000 // Red for visibility
});
bugText.anchor.set(0.5, 0.5);
- bugContainer.addChild(bugText);
- // Add physics for movement
+ bugContainer.addChild(bugText); // Add physics for movement
bugContainer.velocityX = (Math.random() * 2 - 1) * 8; // Random initial direction
bugContainer.velocityY = (Math.random() * 2 - 1) * 8;
bugContainer.speed = 2 + Math.random() * 3; // Base speed varied slightly
bugContainer.escapeTimer = 500; // Countdown until bug escapes (gets faster over time)
@@ -6127,63 +6080,49 @@
bugContainer.down = function () {
// Prevent double-squishing
if (bugContainer.squished) {
return;
- }
- // Bug squished!
- bugContainer.squished = true;
- // Stop movement immediately
+ } // Bug squished!
+ bugContainer.squished = true; // Stop movement immediately
bugContainer.velocityX = 0;
bugContainer.velocityY = 0;
- bugContainer.speed = 0;
- // Visual squish effect
+ bugContainer.speed = 0; // Visual squish effect
bugText.setText("*splat*");
LK.getSound('bugsquish').play();
bugText.fill = 0x00FF00; // Turn green when squished
// Tell the manager about this squish
if (manager) {
manager.bugSquished(bugContainer);
- }
- // Remove after brief delay
+ } // Remove after brief delay
LK.setTimeout(function () {
if (bugContainer.parent) {
bugContainer.parent.removeChild(bugContainer);
}
}, 800);
- };
- // Position randomly on screen with some padding from edges
+ }; // Position randomly on screen with some padding from edges
bugContainer.x = 100 + Math.random() * (2048 - 200);
- bugContainer.y = 100 + Math.random() * (2732 - 200);
- // Update function for animation
+ bugContainer.y = 100 + Math.random() * (2732 - 200); // Update function for animation
bugContainer.update = function (deltaTime) {
// If already squished, don't do any movement or timer updates
if (bugContainer.squished) {
return;
- }
- // Move according to velocity
+ } // Move according to velocity
bugContainer.x += bugContainer.velocityX * bugContainer.speed;
- bugContainer.y += bugContainer.velocityY * bugContainer.speed;
- // Bounce off edges
+ bugContainer.y += bugContainer.velocityY * bugContainer.speed; // Bounce off edges
if (bugContainer.x < 50 || bugContainer.x > 2048 - 50) {
- bugContainer.velocityX *= -1;
- // Speed up slightly on each bounce
+ bugContainer.velocityX *= -1; // Speed up slightly on each bounce
bugContainer.speed *= 1.1;
}
if (bugContainer.y < 50 || bugContainer.y > 2732 - 50) {
- bugContainer.velocityY *= -1;
- // Speed up slightly on each bounce
+ bugContainer.velocityY *= -1; // Speed up slightly on each bounce
bugContainer.speed *= 1.1;
- }
- // Randomly change direction occasionally
+ } // Randomly change direction occasionally
if (Math.random() < 0.02) {
bugContainer.velocityX = (Math.random() * 2 - 1) * 4;
bugContainer.velocityY = (Math.random() * 2 - 1) * 4;
- }
- // Decrease escape timer
- bugContainer.escapeTimer--;
- // Speed up as escape timer decreases
- bugContainer.speed = 2 + bugContainer.escapeTimer / 500 * 1;
- // If timer runs out, bug escapes
+ } // Decrease escape timer
+ bugContainer.escapeTimer--; // Speed up as escape timer decreases
+ bugContainer.speed = 2 + bugContainer.escapeTimer / 500 * 1; // If timer runs out, bug escapes
if (bugContainer.escapeTimer <= 0 && !bugContainer.squished) {
// Prevent multiple escapes
bugContainer.squished = true; // Use squished flag to prevent updates
// Escape animation
@@ -6191,23 +6130,19 @@
bugText.setText(">>>"); // Show it zooming away
// Tell the manager about this escape
if (manager) {
manager.bugEscaped(bugContainer);
- }
- // Remove after brief delay
+ } // Remove after brief delay
LK.setTimeout(function () {
if (bugContainer.parent) {
bugContainer.parent.removeChild(bugContainer);
- }
- // Bug got away - add a message
- addToTerminalLogWithEffect("WARNING: Bug escaped! System stability decreased.");
- // Maybe add a small code coherence penalty
+ } // Bug got away - add a message
+ addToTerminalLogWithEffect("WARNING: Bug escaped! System stability decreased."); // Maybe add a small code coherence penalty
gameState.codeCoherence = Math.max(0, gameState.codeCoherence - 3);
updateTerminal();
}, 800);
}
- };
- // Add an update interval specific to this bug
+ }; // Add an update interval specific to this bug
var updateInterval = LK.setInterval(function () {
if (bugContainer.parent && !bugContainer.squished) {
bugContainer.update(1 / 60);
} else {
@@ -6220,10 +6155,9 @@
// Clear the random effect interval
if (gameState.randomEffectInterval) {
LK.clearInterval(gameState.randomEffectInterval);
gameState.randomEffectInterval = null;
- }
- // Reset text colors
+ } // Reset text colors
if (gameState.logText) {
gameState.logText.fill = 0x00ff00; // Back to green
}
if (gameState.statusLineText) {
@@ -6235,20 +6169,16 @@
}
function createWanderingWord() {
// Choose a random word related to coding/AI
var words = ["function", "variable", "class", "object", "string", "vibe", "hallucination", "coherence", "code", "bug", "system", "error", "recursion", "async", "memory"];
- var word = words[Math.floor(Math.random() * words.length)];
- // Create text object
+ var word = words[Math.floor(Math.random() * words.length)]; // Create text object
var wanderingText = new Text2(word, {
size: 36 * TEXT_SIZE_MULTIPLIER,
fill: 0xaaddff // Light blue color
- });
- // Place at random position
+ }); // Place at random position
wanderingText.x = Math.random() * 1600 + 200;
- wanderingText.y = Math.random() * 2000 + 300;
- // Add to game display
- game.addChild(wanderingText);
- // Set up movement behavior
+ wanderingText.y = Math.random() * 2000 + 300; // Add to game display
+ game.addChild(wanderingText); // Set up movement behavior
var speedX = (Math.random() - 0.5) * 3;
var speedY = (Math.random() - 0.5) * 3;
var lifetime = 0;
var maxLifetime = 200; // Frames the word will exist
@@ -6260,43 +6190,36 @@
wanderingText.parent.removeChild(wanderingText);
}
LK.clearInterval(moveInterval);
return;
- }
- // Move the text
+ } // Move the text
wanderingText.x += speedX;
- wanderingText.y += speedY;
- // Bounce off edges
+ wanderingText.y += speedY; // Bounce off edges
if (wanderingText.x < 0 || wanderingText.x > 2048) {
speedX *= -1;
}
if (wanderingText.y < 0 || wanderingText.y > 2732) {
speedY *= -1;
- }
- // Fade out near end of lifetime
+ } // Fade out near end of lifetime
lifetime++;
if (lifetime > maxLifetime * 0.7) {
wanderingText.alpha = 1 - (lifetime - maxLifetime * 0.7) / (maxLifetime * 0.3);
- }
- // Remove when lifetime is over
+ } // Remove when lifetime is over
if (lifetime >= maxLifetime) {
if (wanderingText && wanderingText.parent) {
wanderingText.parent.removeChild(wanderingText);
}
LK.clearInterval(moveInterval);
}
}, 50);
-}
-// Function to create text that appears to melt
+} // Function to create text that appears to melt
function createMeltingText() {
// Choose random terminal text line to "melt"
var melter = new Container();
melter.x = 50;
- melter.y = Math.random() * 1500 + 500;
- // Warning messages that might "melt"
+ melter.y = Math.random() * 1500 + 500; // Warning messages that might "melt"
var messages = ["SYSTEM UNSTABLE", "COHERENCE FAILING", "REALITY ERROR", "NEURAL MISALIGNMENT", "CONTEXT OVERFLOW"];
- var message = messages[Math.floor(Math.random() * messages.length)];
- // Create dripping letters
+ var message = messages[Math.floor(Math.random() * messages.length)]; // Create dripping letters
for (var i = 0; i < message.length; i++) {
var letter = new Text2(message[i], {
size: 40 * TEXT_SIZE_MULTIPLIER,
fill: 0xff00ff
@@ -6307,10 +6230,9 @@
letter.maxDrip = Math.random() * 300 + 100;
letter.currentDrip = 0;
melter.addChild(letter);
}
- game.addChild(melter);
- // Set up dripping behavior
+ game.addChild(melter); // Set up dripping behavior
var dripInterval = LK.setInterval(function () {
if (!gameState.hallucinationMode) {
// Clean up if hallucination mode ends
if (melter && melter.parent) {
@@ -6318,98 +6240,82 @@
}
LK.clearInterval(dripInterval);
return;
}
- var allDone = true;
- // Make letters drip
+ var allDone = true; // Make letters drip
for (var i = 0; i < melter.children.length; i++) {
var letter = melter.children[i];
if (letter.currentDrip < letter.maxDrip) {
letter.currentDrip += letter.dripSpeed;
letter.y = letter.currentDrip;
letter.alpha = 1 - letter.currentDrip / letter.maxDrip;
allDone = false;
}
- }
- // Remove when all letters have fully dripped
+ } // Remove when all letters have fully dripped
if (allDone) {
if (melter && melter.parent) {
melter.parent.removeChild(melter);
}
LK.clearInterval(dripInterval);
}
}, 50);
-}
-// Function to create a letter that falls out of the terminal
+} // Function to create a letter that falls out of the terminal
function createFallingLetter() {
// Choose random letter
var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
- var letter = letters.charAt(Math.floor(Math.random() * letters.length));
- // Create falling letter text
+ var letter = letters.charAt(Math.floor(Math.random() * letters.length)); // Create falling letter text
var fallingLetter = new Text2(letter, {
size: 50 * TEXT_SIZE_MULTIPLIER,
fill: 0x00ff00 // Same as terminal text
- });
- // Position toward top of terminal
+ }); // Position toward top of terminal
fallingLetter.x = Math.random() * 1800 + 100;
- fallingLetter.y = Math.random() * 500 + 200;
- // Add physics properties
+ fallingLetter.y = Math.random() * 500 + 200; // Add physics properties
fallingLetter.velocityY = 0;
fallingLetter.gravity = 0.5;
fallingLetter.rotationSpeed = (Math.random() - 0.5) * 0.2;
- game.addChild(fallingLetter);
- // Set up falling behavior
+ game.addChild(fallingLetter); // Set up falling behavior
var fallInterval = LK.setInterval(function () {
if (!gameState.hallucinationMode) {
// Clean up if hallucination mode ends
if (fallingLetter && fallingLetter.parent) {
fallingLetter.parent.removeChild(fallingLetter);
}
LK.clearInterval(fallInterval);
return;
- }
- // Apply gravity
+ } // Apply gravity
fallingLetter.velocityY += fallingLetter.gravity;
- fallingLetter.y += fallingLetter.velocityY;
- // Apply rotation
- fallingLetter.rotation += fallingLetter.rotationSpeed;
- // Remove when it falls off screen
+ fallingLetter.y += fallingLetter.velocityY; // Apply rotation
+ fallingLetter.rotation += fallingLetter.rotationSpeed; // Remove when it falls off screen
if (fallingLetter.y > 2732) {
if (fallingLetter && fallingLetter.parent) {
fallingLetter.parent.removeChild(fallingLetter);
}
LK.clearInterval(fallInterval);
}
}, 50);
-}
-// Function to create a command that appears to type itself
+} // Function to create a command that appears to type itself
function createSelfWritingCommand() {
// Choose random command from available commands
- var commandTexts = [];
- // Get available command texts if possible
+ var commandTexts = []; // Get available command texts if possible
if (gameState.currentCommands && gameState.currentCommands.length > 0) {
for (var i = 0; i < gameState.currentCommands.length; i++) {
if (gameState.currentCommands[i].text) {
commandTexts.push(gameState.currentCommands[i].text);
}
}
- }
- // Fallback commands if no commands available
+ } // Fallback commands if no commands available
if (commandTexts.length === 0) {
commandTexts = ["Make it good", "Add more fun to the game", "Fix all the bugs", "Make AI smarter", "Double check everything"];
}
- var commandText = commandTexts[Math.floor(Math.random() * commandTexts.length)];
- // Create ghost command text
+ var commandText = commandTexts[Math.floor(Math.random() * commandTexts.length)]; // Create ghost command text
var ghostCommand = new Text2(">", {
size: 36 * TEXT_SIZE_MULTIPLIER,
fill: 0xaaffaa // Lighter green
- });
- // Position in command area
+ }); // Position in command area
ghostCommand.x = Math.random() * 400 + 600;
ghostCommand.y = 2732 * 0.75 + Math.random() * 400 - 200;
ghostCommand.alpha = 0.7;
- game.addChild(ghostCommand);
- // Set up typing behavior
+ game.addChild(ghostCommand); // Set up typing behavior
var currentLength = 1; // Start with just ">"
var maxLength = commandText.length + 1; // +1 for the ">"
var typeInterval = LK.setInterval(function () {
if (!gameState.hallucinationMode) {
@@ -6418,10 +6324,9 @@
ghostCommand.parent.removeChild(ghostCommand);
}
LK.clearInterval(typeInterval);
return;
- }
- // Add next letter
+ } // Add next letter
if (currentLength < maxLength) {
currentLength++;
ghostCommand.setText(">" + commandText.substring(0, currentLength - 1));
} else {
@@ -6439,20 +6344,18 @@
function setupRandomEffectCycling() {
// Clear any existing effect interval
if (gameState.randomEffectInterval) {
LK.clearInterval(gameState.randomEffectInterval);
- }
- // Set up interval to trigger random effects
+ } // Set up interval to trigger random effects
gameState.randomEffectInterval = LK.setInterval(function () {
if (!gameState.hallucinationMode) {
// Clean up if not in hallucination mode
if (gameState.randomEffectInterval) {
LK.clearInterval(gameState.randomEffectInterval);
gameState.randomEffectInterval = null;
}
return;
- }
- // 40% chance every 2 seconds to trigger any effect
+ } // 40% chance every 2 seconds to trigger any effect
if (Math.random() < 0.4) {
// Use weighted random selection to favor falling letters
// Here we use a weighted distribution:
// - Falling letters: 50% chance (higher probability)
@@ -6485,26 +6388,22 @@
callback();
}
return;
}
- gameState.hallucinationMode = true;
- // gameState.hallucinationDay = 0; // This line is removed
+ gameState.hallucinationMode = true; // gameState.hallucinationDay = 0; // This line is removed
var wasBusy = gameState.isBusy;
gameState.isBusy = true;
- updateCommandButtonsState(false);
- // Apply text effects (purple text only)
+ updateCommandButtonsState(false); // Apply text effects (purple text only)
if (gameState.logText) {
gameState.logText.fill = 0xddaaff; // Subtle purple
}
if (gameState.statusLineText) {
gameState.statusLineText.fill = 0xddaaff;
}
if (gameState.cursor) {
gameState.cursor.fill = 0xddaaff;
- }
- // Set up random visual effects
- setupRandomEffectCycling();
- // Original message sequence (preserved from original function)
+ } // Set up random visual effects
+ setupRandomEffectCycling(); // Original message sequence (preserved from original function)
addToTerminalLogWithEffect("WaRnInG: SyStEm EnTeRiNg HaLlUcInAtIoN mOdE", function () {
LK.setTimeout(function () {
addToTerminalLogWithEffect("Ai TaKiNg OvEr CoNcEpT sElEcTiOnS", function () {
LK.setTimeout(function () {
@@ -6542,10 +6441,9 @@
}, 500);
});
}, 500);
});
-}
-// Apply hallucination text effects (alternating case)
+} // Apply hallucination text effects (alternating case)
function applyHallucinationTextEffects() {
// Only apply alternating case effect on day 0
if (gameState.hallucinationDay === 0) {
// Change text color
@@ -6574,29 +6472,24 @@
function applyHallucinationVisuals() {
// Change terminal colors for hallucination mode
if (gameState.logText) {
gameState.logText.fill = 0xff00ff; // Magenta text
- }
- // Change status line color
+ } // Change status line color
if (gameState.statusLineText) {
gameState.statusLineText.fill = 0xff00ff;
- }
- // Change cursor color
+ } // Change cursor color
if (gameState.cursor) {
gameState.cursor.fill = 0xff00ff;
}
-}
-// In the showConceptSelection function, add a parameter for preserving vibes
+} // In the showConceptSelection function, add a parameter for preserving vibes
function showConceptSelection(category, preservedVibes) {
// If in hallucination mode, automatically select a random concept
// At the beginning of showConceptSelection function, make sure this part is working:
if (gameState.hallucinationMode) {
// Get random option
var options = conceptOptions[category];
- var randomOption = options[Math.floor(Math.random() * options.length)];
- // Set the selection
- gameState.conceptCards[category] = randomOption;
- // Show selection message with glitchy text
+ var randomOption = options[Math.floor(Math.random() * options.length)]; // Set the selection
+ gameState.conceptCards[category] = randomOption; // Show selection message with glitchy text
addToTerminalLogWithEffect("AฬทIฬท SฬทEฬทLฬทEฬทCฬทTฬทEฬทDฬท " + category.toUpperCase() + ": " + randomOption, function () {
LK.setTimeout(function () {
addToTerminalLogWithEffect("IฬทNฬทIฬทTฬทIฬทAฬทLฬทIฬทZฬทIฬทNฬทGฬท CฬทOฬทMฬทMฬทAฬทNฬทDฬท IฬทNฬทTฬทEฬทRฬทFฬทAฬทCฬทEฬท...", function () {
LK.setTimeout(function () {
@@ -6609,34 +6502,29 @@
});
}, 500);
});
return;
- }
- // Create selection container
+ } // Create selection container
var selectionContainer = new Container();
selectionContainer.x = 2048 / 2;
selectionContainer.y = 2732 / 2;
- game.addChild(selectionContainer);
- // Create background - make it slightly taller to fit 3 rows
+ game.addChild(selectionContainer); // Create background - make it slightly taller to fit 3 rows
var bg = LK.getAsset('terminalBg', {
width: 1800,
height: 1400,
// Increased from 1200 to accommodate 3 rows
anchorX: 0.5,
anchorY: 0.5
});
- selectionContainer.addChild(bg);
- // Create title
+ selectionContainer.addChild(bg); // Create title
var title = new Text2("SELECT " + category.toUpperCase(), {
size: 60 * TEXT_SIZE_MULTIPLIER,
fill: 0x00ff00
});
title.anchor.set(0.5, 0);
title.y = -500; // Moved up slightly to make room for more options
- selectionContainer.addChild(title);
- // Get all options for this category
- var options = conceptOptions[category].slice();
- // Calculate optimal button size based on longest concept in category
+ selectionContainer.addChild(title); // Get all options for this category
+ var options = conceptOptions[category].slice(); // Calculate optimal button size based on longest concept in category
// Define the text size for concept buttons
var conceptButtonTextSize = 40 * TEXT_SIZE_MULTIPLIER; // Slightly reduced from 45
// Find max text width for this category
var maxTextWidth = 0;
@@ -6646,10 +6534,9 @@
});
options.forEach(function (option) {
tempText.setText(">" + option);
maxTextWidth = Math.max(maxTextWidth, tempText.width);
- });
- // Calculate button width with padding
+ }); // Calculate button width with padding
var buttonWidth = maxTextWidth + 120; // Add padding
var buttonHeight = 130; // Slightly reduced from 150
// Calculate grid layout
var columns = 3;
@@ -6662,38 +6549,32 @@
options.forEach(function (option, index) {
var row = Math.floor(index / columns);
var col = index % columns;
var buttonText = ">" + option;
- var button = new Container();
- // Create background with calculated width
+ var button = new Container(); // Create background with calculated width
var bg = LK.getAsset('buttonBg', {
width: buttonWidth,
height: buttonHeight,
color: 0x333333
});
bg.anchor.set(0.5, 0.5);
- button.addChild(bg);
- // Create text
+ button.addChild(bg); // Create text
var textObj = new Text2(buttonText, {
size: conceptButtonTextSize,
fill: 0x00ff00
});
textObj.anchor.set(0.5, 0.5);
- button.addChild(textObj);
- // Set interactivity
+ button.addChild(textObj); // Set interactivity
button.interactive = true;
button.down = function () {
button.scale.set(0.95);
- };
- // Define the callback function
+ }; // Define the callback function
var onSelect = function onSelect() {
gameState.conceptCards[category] = option;
- game.removeChild(selectionContainer);
- // Preserve vibes immediately after selection
+ game.removeChild(selectionContainer); // Preserve vibes immediately after selection
if (preservedVibes !== undefined) {
gameState.vibePoints = preservedVibes;
- }
- // Sequence the post-selection events
+ } // Sequence the post-selection events
addToTerminalLogWithEffect("SELECTED " + category.toUpperCase() + ": " + option, function () {
// Preserve vibes again after adding text
if (preservedVibes !== undefined) {
gameState.vibePoints = preservedVibes;
@@ -6705,10 +6586,9 @@
gameState.vibePoints = preservedVibes;
}
LK.setTimeout(function () {
// Set busy to false BEFORE creating commands
- gameState.isBusy = false;
- // Generate commands ONLY at this point (after initialization text)
+ gameState.isBusy = false; // Generate commands ONLY at this point (after initialization text)
gameState.currentCommands = getCurrentCommands();
createCommandPrompts(); // Create commands only after initialization text
updateCommandButtonsState(true); // Explicitly update button states
updateTerminal(); // Update terminal *after* prompts are created
@@ -6724,41 +6604,35 @@
button.up = function () {
button.scale.set(1);
LK.getSound('conceptbutton').play(); // Play concept button sound
onSelect(); // Call the previously defined callback logic
- };
- // Position in grid layout
+ }; // Position in grid layout
button.x = startX + col * horizontalSpacing;
button.y = startY + row * verticalSpacing;
selectionContainer.addChild(button);
});
-}
-// Updated button creation with more precise width handling and busy state check
+} // Updated button creation with more precise width handling and busy state check
function createCommandButton(text, callback, width) {
- var button = new Container();
- // Only check for maintenance commands if it's in the main game (not title screen)
+ var button = new Container(); // Only check for maintenance commands if it's in the main game (not title screen)
// and matches a maintenance command exactly
var isMaintenance = gameState.state === STATES.PLAYING && maintenanceCommands.some(function (cmd) {
return ">" + cmd.text === text;
- });
- // Only add background for game commands (not START or title screen buttons)
+ }); // Only add background for game commands (not START or title screen buttons)
if (gameState.state === STATES.PLAYING) {
var bg = LK.getAsset('buttonBg', {
width: width || 400,
height: 100,
color: isMaintenance ? 0x001133 : 0x333333
});
bg.anchor.set(0.5, 0.5);
button.addChild(bg);
- }
- // Add text
+ } // Add text
var textObj = new Text2(text, {
size: 30 * TEXT_SIZE_MULTIPLIER,
fill: isMaintenance ? 0x00ffff : 0x00ff00
});
textObj.anchor.set(0.5, 0.5);
- button.addChild(textObj);
- // Make interactive
+ button.addChild(textObj); // Make interactive
button.interactive = true;
button.down = function () {
// Check if game is busy (for in-game buttons only, excluding END DAY)
if (gameState.state === STATES.PLAYING && gameState.isBusy && text !== "END DAY") {
@@ -6778,61 +6652,50 @@
callback();
}
};
return button;
-}
-// Launch sequence functions
+} // Launch sequence functions
function showLaunchScreen() {
// Black overlay
var overlay = LK.getAsset('overlayBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
- game.addChild(overlay);
- // Create a container for the text
+ game.addChild(overlay); // Create a container for the text
var bootTextContainer = new Container();
bootTextContainer.x = 2048 / 2;
bootTextContainer.y = 2732 / 2;
- game.addChild(bootTextContainer);
- // Initial boot message
- var bootMessages = ["BOOTING VIBE CODER OS v1.0..."];
- // Find the longest possible message in advance to set container width
- var allPossibleMessages = ["BOOTING VIBE CODER OS v1.0...", "INITIALIZING TERMINAL...", "LOADING VIBE DATABASE...", "CONNECTING TO AI SUBSYSTEMS...", "READY!"];
- // Determine the widest text to pre-calculate offsets
+ game.addChild(bootTextContainer); // Initial boot message
+ var bootMessages = ["BOOTING VIBE CODER OS v1.0..."]; // Find the longest possible message in advance to set container width
+ var allPossibleMessages = ["BOOTING VIBE CODER OS v1.0...", "INITIALIZING TERMINAL...", "LOADING VIBE DATABASE...", "CONNECTING TO AI SUBSYSTEMS...", "READY!"]; // Determine the widest text to pre-calculate offsets
var tempText = new Text2("", {
size: 40 * TEXT_SIZE_MULTIPLIER,
fill: 0x00ff00
});
var maxWidth = 0;
for (var i = 0; i < allPossibleMessages.length; i++) {
tempText.setText(allPossibleMessages[i]);
maxWidth = Math.max(maxWidth, tempText.width);
- }
- // Function to update the boot text
+ } // Function to update the boot text
function updateBootText() {
// Clear previous text
while (bootTextContainer.children.length > 0) {
bootTextContainer.removeChild(bootTextContainer.children[0]);
- }
- // Create new text objects, one per line
+ } // Create new text objects, one per line
for (var i = 0; i < bootMessages.length; i++) {
var lineText = new Text2(bootMessages[i], {
size: 40 * TEXT_SIZE_MULTIPLIER,
fill: 0x00ff00,
align: 'left'
- });
- // Center horizontally by setting X position to half the max width
- lineText.x = -maxWidth / 2;
- // Position vertically with appropriate line spacing
+ }); // Center horizontally by setting X position to half the max width
+ lineText.x = -maxWidth / 2; // Position vertically with appropriate line spacing
lineText.y = (i - bootMessages.length / 2) * 60 * TEXT_SIZE_MULTIPLIER + 30 * TEXT_SIZE_MULTIPLIER;
bootTextContainer.addChild(lineText);
}
- }
- // Initial render
- updateBootText();
- // Boot sequence
+ } // Initial render
+ updateBootText(); // Boot sequence
LK.setTimeout(function () {
bootMessages.push("INITIALIZING TERMINAL...");
updateBootText();
LK.setTimeout(function () {
@@ -6865,46 +6728,39 @@
function showTitleScreen() {
// Clear screen
while (game.children.length > 0) {
game.removeChild(game.children[0]);
- }
- // Set state
- gameState.state = STATES.TITLE;
- // Create background
+ } // Set state
+ gameState.state = STATES.TITLE; // Create background
var background = LK.getAsset('overlayBg', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
- game.addChild(background);
- // Create title
+ game.addChild(background); // Create title
var title = new Text2("VIBE CODER", {
size: 120 * TEXT_SIZE_MULTIPLIER,
fill: 0x00ff00
});
title.anchor.set(0.5, 0.5);
title.x = 2048 / 2;
title.y = 800;
- game.addChild(title);
- // Create subtitle
+ game.addChild(title); // Create subtitle
var subtitle = new Text2("The AI Coding Simulator", {
size: 60 * TEXT_SIZE_MULTIPLIER,
fill: 0x00ff00
});
subtitle.anchor.set(0.5, 0.5);
subtitle.x = 2048 / 2;
subtitle.y = 1000;
- game.addChild(subtitle);
- // Add startButtonPressed flag
- var startButtonPressed = false;
- // Create start button - twice as large
+ game.addChild(subtitle); // Add startButtonPressed flag
+ var startButtonPressed = false; // Create start button - twice as large
var startButton = createCommandButton(">START", function () {
// Check if button has already been pressed
if (startButtonPressed) {
return; // Exit the function if button was already pressed
- }
- // Set flag to true to prevent multiple clicks
+ } // Set flag to true to prevent multiple clicks
startButtonPressed = true;
LK.getSound('startsound').play();
initGameWithIntro();
});
@@ -6913,10 +6769,9 @@
var originalDown = startButton.down;
startButton.down = function () {
// Instead of scaling to 0.95, scale to current scale * 0.95 (which would be 1.9)
this.scale.set(this.scale.x * 0.95, this.scale.y * 0.95);
- };
- // Similarly, we should override the up handler to restore to scale 2
+ }; // Similarly, we should override the up handler to restore to scale 2
var originalUp = startButton.up;
startButton.up = function () {
this.scale.set(2); // Restore to full size
// Call the original callback
@@ -6925,26 +6780,23 @@
}
};
startButton.x = 2048 / 2;
startButton.y = 1400;
- game.addChild(startButton);
- // Determine current level based on games completed
+ game.addChild(startButton); // Determine current level based on games completed
var currentLevel = "novice";
if (playerProgress.gamesCompleted > 6) {
currentLevel = "expert";
} else if (playerProgress.gamesCompleted > 3) {
currentLevel = "intermediate";
- }
- // Create level text
+ } // Create level text
var levelText = new Text2("Current level: " + currentLevel, {
size: 40 * TEXT_SIZE_MULTIPLIER,
fill: 0x00ff00
});
levelText.anchor.set(0.5, 0.5);
levelText.x = 2048 / 2;
levelText.y = startButton.y + 250; // Position below start button
- game.addChild(levelText);
- // Create games completed text
+ game.addChild(levelText); // Create games completed text
var gamesCompletedText = new Text2("Games completed: " + playerProgress.gamesCompleted, {
size: 40 * TEXT_SIZE_MULTIPLIER,
fill: 0x00ff00
});
@@ -6961,10 +6813,9 @@
x: 2048 / 2,
y: 2732 / 2,
alpha: 0
});
- game.addChild(fadeOverlay);
- // Fade to black
+ game.addChild(fadeOverlay); // Fade to black
tween(fadeOverlay, {
alpha: 1
}, {
duration: 500,
@@ -6972,10 +6823,9 @@
// Clear screen and init game state
while (game.children.length > 0) {
game.removeChild(game.children[0]);
}
- initGame();
- // Fade from black
+ initGame(); // Fade from black
fadeOverlay.alpha = 1;
game.addChild(fadeOverlay);
tween(fadeOverlay, {
alpha: 0
@@ -6986,38 +6836,32 @@
}
});
}
});
-}
-// Helper function to calculate button width based on text length
+} // Helper function to calculate button width based on text length
function processEndDaySequence() {
- gameState.day++;
- // Create a message queue to ensure proper sequence
- var messageQueue = [];
- // Add day initialization message
+ gameState.day++; // Create a message queue to ensure proper sequence
+ var messageQueue = []; // Add day initialization message
messageQueue.push({
text: "DAY " + gameState.day + " INITIALIZED",
type: "normal"
- });
- // Add overnight degradation message if needed
+ }); // Add overnight degradation message if needed
if (gameState.bugs > 0) {
// Remove coherence loss from bugs - keeping only the warning message
messageQueue.push({
text: "WARNING: " + gameState.bugs + " bug" + (gameState.bugs > 1 ? 's' : '') + " in system",
type: "normal"
});
- }
- // Check if we need to enter hallucination mode
+ } // Check if we need to enter hallucination mode
var needsHallucination = gameState.codeCoherence <= 0 || gameState.bugs >= 10;
var conceptDays = {
1: 'platform',
3: 'visual',
5: 'genre',
7: 'mechanic',
9: 'feature'
};
- var isConceptDay = !!conceptDays[gameState.day];
- // Process message queue sequentially
+ var isConceptDay = !!conceptDays[gameState.day]; // Process message queue sequentially
function processNextMessage() {
if (messageQueue.length === 0) {
// All messages processed, now handle game state
handlePostMessageSetup();
@@ -7026,32 +6870,27 @@
var message = messageQueue.shift();
addToTerminalLogWithEffect(message.text, function () {
LK.setTimeout(processNextMessage, 200); // Small delay between messages
});
- }
- // Start processing messages
- processNextMessage();
- // Handle setup after all messages are complete
+ } // Start processing messages
+ processNextMessage(); // Handle setup after all messages are complete
function handlePostMessageSetup() {
- updateTerminal();
- // Clear any existing command prompts
+ updateTerminal(); // Clear any existing command prompts
if (gameState.promptContainer) {
game.removeChild(gameState.promptContainer);
gameState.promptContainer = null;
}
if (needsHallucination) {
- gameState.isBusy = true;
- // Set up callback for when hallucination processing completes
+ gameState.isBusy = true; // Set up callback for when hallucination processing completes
gameState.onHallucinationComplete = function () {
if (isConceptDay) {
showConceptSelection(conceptDays[gameState.day]);
} else {
gameState.currentCommands = getCurrentCommands();
createCommandPrompts();
updateCommandButtonsState(true);
}
- };
- // If already in hallucination mode, add deepening message
+ }; // If already in hallucination mode, add deepening message
if (gameState.hallucinationMode) {
addToTerminalLogWithEffect("HฬทaฬทLฬทlฬทUฬทcฬทIฬทnฬทAฬทtฬทIฬทoฬทNฬท DฬทeฬทEฬทpฬทEฬทnฬทIฬทnฬทGฬท...", function () {
enterHallucinationState();
});
@@ -7076,45 +6915,39 @@
}
}
function endDay() {
// FORCE clear any stuck state
- gameState.isBusy = false;
- // Check if game is over
+ gameState.isBusy = false; // Check if game is over
if (gameState.day >= gameState.maxDays) {
gameState.isBusy = false;
evaluateProject();
return;
- }
- // Reset for new day
+ } // Reset for new day
gameState.commandsUsed = 0;
gameState.terminal.log = [];
- gameState.cursorTracking.lineCount = 0;
- // Process the day transition with proper message sequencing
+ gameState.cursorTracking.lineCount = 0; // Process the day transition with proper message sequencing
processEndDaySequence();
}
function checkGameState() {
// Check if we need hallucination mode
- var needsHallucination = !gameState.hallucinationMode && (gameState.bugs >= 10 || gameState.codeCoherence <= 0);
- // Handle daily command limit
+ var needsHallucination = !gameState.hallucinationMode && (gameState.bugs >= 10 || gameState.codeCoherence <= 0); // Handle daily command limit
if (gameState.commandsUsed >= gameState.maxCommandsPerDay) {
var hasShownLimitMessage = gameState.terminal.log.some(function (entry) {
return entry && entry.includes("Daily command limit reached");
});
if (!hasShownLimitMessage) {
gameState.isBusy = true;
addToTerminalLogWithEffect("NOTICE: Daily command limit reached. END DAY to continue.", function () {
gameState.isBusy = false;
- createCommandPrompts();
- // After showing the limit message, check if we also need hallucination
+ createCommandPrompts(); // After showing the limit message, check if we also need hallucination
if (needsHallucination) {
enterHallucinationState();
}
});
} else {
// Message already shown
gameState.isBusy = false;
- createCommandPrompts();
- // Also check if we need hallucination
+ createCommandPrompts(); // Also check if we need hallucination
if (needsHallucination) {
enterHallucinationState();
}
}
@@ -7129,13 +6962,11 @@
}
}
function gameOver(message) {
// Instead of ending the game, just show the message and continue
- addToTerminalLogWithEffect(message);
- // If we're at the end of the game (day > maxDays), show the review
+ addToTerminalLogWithEffect(message); // If we're at the end of the game (day > maxDays), show the review
if (gameState.day > gameState.maxDays) {
- addToTerminalLogWithEffect("\n>PRESS ANY KEY TO RESTART");
- // Simple click anywhere to restart
+ addToTerminalLogWithEffect("\n>PRESS ANY KEY TO RESTART"); // Simple click anywhere to restart
var overlay = new Container();
overlay.width = 2048;
overlay.height = 2732;
overlay.interactive = true;
@@ -7196,10 +7027,9 @@
vibeBoostActive: false // Flag to prevent multiple boosts at once
};
cleanupHallucinationEffects();
game.activeBugPartyBugs = [];
- createTerminal();
- // Sequence the initial text
+ createTerminal(); // Sequence the initial text
LK.setTimeout(function () {
addToTerminalLogWithEffect("VIBE CODER OS v1.0", function () {
LK.setTimeout(function () {
addToTerminalLogWithEffect("INITIALIZING NEW PROJECT...", function () {
@@ -7219,14 +7049,12 @@
});
}, 500);
});
}, 500);
-}
-// Function to play a random vibe song
+} // Function to play a random vibe song
function playRandomVibeSong() {
// Get previously played song (if any)
- var previousSong = gameState.currentSong;
- // Store all song IDs and durations
+ var previousSong = gameState.currentSong; // Store all song IDs and durations
var songData = {
vibebeat1: 226168,
// ~3:46
vibebeat2: 199131,
@@ -7241,52 +7069,41 @@
// ~3:12
vibebeat7: 213133,
// ~3:33
vibebeat8: 220212 // ~3:40
- };
- // Get all song IDs
- var songIds = Object.keys(songData);
- // Filter out the previous song to avoid repetition
+ }; // Get all song IDs
+ var songIds = Object.keys(songData); // Filter out the previous song to avoid repetition
var availableSongs = previousSong ? songIds.filter(function (id) {
return id !== previousSong;
- }) : songIds;
- // Select a random song from available options
+ }) : songIds; // Select a random song from available options
var randomIndex = Math.floor(Math.random() * availableSongs.length);
- var songId = availableSongs[randomIndex];
- // Store the current song ID
- gameState.currentSong = songId;
- // Play the selected song with fade-in and loop set to false
+ var songId = availableSongs[randomIndex]; // Store the current song ID
+ gameState.currentSong = songId; // Play the selected song with fade-in and loop set to false
LK.playMusic(songId, {
loop: false,
fade: {
start: 0,
end: 0.5,
duration: 2000 // 2-second fade in
}
- });
- // Get the duration for the selected song
- var duration = songData[songId];
- // Clear any existing timeout
+ }); // Get the duration for the selected song
+ var duration = songData[songId]; // Clear any existing timeout
if (gameState.songChangeTimeout) {
LK.clearTimeout(gameState.songChangeTimeout);
- }
- // Set timeout to play next song when this one ends
+ } // Set timeout to play next song when this one ends
// Subtract 500ms to start the next song slightly before current ends for smooth transition
gameState.songChangeTimeout = LK.setTimeout(playRandomVibeSong, duration - 500);
-}
-// Initialize music system
+} // Initialize music system
function initMusicSystem() {
// Add necessary properties to gameState if they don't exist
if (!gameState.currentSong) {
gameState.currentSong = null;
}
if (!gameState.songChangeTimeout) {
gameState.songChangeTimeout = null;
- }
- // Start the first song
+ } // Start the first song
playRandomVibeSong();
-}
-// Start with launch screen
+} // Start with launch screen
showLaunchScreen();
function generateUserReviews() {
return generateUserReviewSet().join("\n");
}
vibebeat1
Music
vibebeat2
Music
vibebeat3
Music
vibebeat4
Music
vibebeat5
Music
vibebeat6
Music
buttonsound
Sound effect
endday
Sound effect
startsound
Sound effect
bugsquish
Sound effect
conceptbutton
Sound effect
wheelstart
Sound effect
wheelspin
Sound effect
wheelstop
Sound effect
keytype
Sound effect