{ "_comment": "Stage Clear rounds are six FRIENDS you help, not opponents. introLines plays IN ORDER during the intro cutscene, one line per keypress, until the friend runs out and the stage begins — add or remove lines freely, any length works. winLines / loseLines are picked at random from their arrays.", "endless": { "name": "Endless", "description": "Clear panels for as long as you can. The stack rises faster as you go." }, "stageClear": { "name": "Stage Clear", "description": "Six friends, five stages each. Help each one dig out — survive until the CLEAR line slides in, then wipe out every panel above it.", "stagesPerRound": 5, "stageSpeedStep": 0.2, "rounds": [ { "characterId": "beth", "spriteIndex": 18, "name": "Beth", "speedLevel": 1, "startRows": 6, "clearLineRows": 3, "introLines": [ "Well hey there, stranger! Ain't you a sight for sore eyes.", "These panels are stackin' up faster than I can sort 'em, and I've been at it all mornin'.", "Use your arrow keys to move your selecter aroung, and press space, x, or z o swap tiles.", "Get three in a row and they'll get out of town faster than a varmit at sundown!", "Clear enough of 'em and you can help me clean this here town up!" ], "winLines": [ "Well shoot, you cleared the whole mess! Bless your heart.", "You saved my bacon, sugar. I owe you a pie.", "Would ya look at that — spotless. Thank you kindly!" ], "loseLines": [ "Aw, don't fret none. Take a breath and we'll try her again.", "It got away from us, sugar. Happens to the best of 'em.", "No harm done. Dust yourself off and come on back." ] }, { "characterId": "jerry", "spriteIndex": 10, "name": "Jerry", "speedLevel": 1, "startRows": 6, "clearLineRows": 3, "introLines": [ "Well now, partner — y'all showed up right on time.", "I got myself in a jam again. Pile's near up to my hat.", "Reckon you could help me dig outta this?", "Much obliged. Let's get to it!" ], "winLines": [ "Hoo-wee, you cleaned that up right quick! Much obliged.", "Clear as a summer sky. You're a good friend, partner.", "That's how it's done! Drinks are on me." ], "loseLines": [ "Ah, it buried us both. Ain't your fault, partner.", "We near had it! Give her another go when you're ready.", "No shame in that one. Stack was stubborn." ] }, { "characterId": "michael", "spriteIndex": 15, "name": "Michael", "speedLevel": 2, "startRows": 7, "clearLineRows": 3, "introLines": [ "Hey mon! Irie timing, ya know.", "Dese panels been pilin' up on me all day and I hold dem back alone too long.", "Two pair a hands beat one, mon — come clear it wit' me!" ], "winLines": [ "Ya cleared it all, mon! Big respect, big respect.", "Sweet work mon — dat board is clean like new!", "Ya come through for me, mon. Dat's a real friend." ], "loseLines": [ "No worries mon, we take a breath and go again.", "Dat stack fought hard, ya. Nothin' lost.", "Easy mon, easy. Come back when ya ready." ] }, { "characterId": "steve", "spriteIndex": 17, "name": "Steve", "speedLevel": 2, "startRows": 7, "clearLineRows": 2, "introLines": [ "I traveled a considerable distance across the galaxy to find you.", "My calculations are unambiguous: I cannot clear this stack alone.", "You are, improbably, my best available option.", "Assistance requested, friend. Shall we begin?" ], "winLines": [ "Remarkable. A lifeform this resourceful is a valuable ally.", "The board is empty. I shall record your name in my logs.", "Efficient. I did not expect gratitude to feel like this." ], "loseLines": [ "The stack exceeded our tolerances. Recalibrate and return.", "A failed attempt is merely data. We proceed.", "Do not process this as defeat. Process it as a first pass." ] }, { "characterId": "victor", "spriteIndex": 2, "name": "Victor", "speedLevel": 3, "startRows": 8, "clearLineRows": 2, "introLines": [ "Ah. The ancients said help would come.", "I have carried this stack a long while, and my arms grow tired.", "Sit with me. Share the weight a moment.", "Patience, friend — together the panels fall exactly where they should." ], "winLines": [ "The ancients smile upon you today — and so do I.", "Stillness at last. You have my gratitude, friend.", "You saw the pattern I could not. Thank you." ], "loseLines": [ "The stack rose. So will we. Breathe, and begin again.", "Nothing is lost that can be tried once more.", "Patience, friend. The board will wait for us." ] }, { "characterId": "klaxon", "spriteIndex": 29, "name": "Klaxon", "speedLevel": 4, "startRows": 8, "clearLineRows": 2, "introLines": [ "DISTRESS SIGNAL BROADCAST. FRIEND DETECTED. RELIEF SUBROUTINE: RUNNING.", "MY BUFFERS ARE OVERFLOWING AND I CANNOT FLUSH THEM ALONE.", "OBJECTIVE: CLEAR THE STACK. CREW REQUIRED: TWO. PRESENT: ONE.", "ASSISTANCE REQUEST TRANSMITTED. ACCEPT?" ], "winLines": [ "BUFFERS CLEAR. GRATITUDE SUBROUTINE: RUNNING AT MAXIMUM.", "OBJECTIVE COMPLETE. FRIENDSHIP PROTOCOL PERMANENTLY INSTALLED.", "ERROR: CANNOT COMPUTE HOW GOOD THIS FEELS. THANK YOU." ], "loseLines": [ "OVERFLOW. NO BLAME ASSIGNED. RETRY WHEN READY.", "ATTEMPT LOGGED. FRIENDSHIP UNAFFECTED BY OUTCOME.", "SYSTEM RESET. WE GO AGAIN, PARTNER-UNIT." ] } ] }, "puzzle": { "name": "Puzzle", "description": "Clear every panel in the fewest swaps. No time pressure — think it through." } }