|  | (() => {
    function checkSuspicion(state, add = 0) {
        const old = getStat("suspicion", state);
        if (add >= 0) {
            add *= state.geta.awareness;
        }
        changeStat("suspicion", add, state);
        if (getStat("suspicion", state) >= 100) {
            print(["Geta spots you!", "You're snatched up and tossed into the fox's bowl of cereal."]);
            goToRoom("in-bowl", state);
            return false;
        } else if (getStat("suspicion", state) >= 75 && old < 75) {
            print(["The fox is very suspicious. You're going to get caught if you keep this up..."]);
        }
        return true;
    }
    stories.push({
        "id": "geta-unaware",
        "name": "Geta's Breakfast",
        "tags": [
            "Player Prey",
            "Digestion",
            "Macro/Micro"
        ],
        "intro": {
            "start": "pepper-grinder",
            "setup": state => {
                state.geta = {};
                state.geta.awareness = 1;
                state.player.stats.health = { name: "Health", type: "meter", value: 100, min: 0, max: 100, color: "rgb(255,55,55)" };
                state.player.stats.suspicion = { name: "Suspicion", type: "meter", value: 0, min: 0, max: 100, color: "rgb(100,100,100)" };
                state.info.time.value = 60 * 60 * 7 + 60 * 17;
                state.player.flags.caught = false;
                startTimer({
                    id: "clock",
                    func: state => {
                        state.info.time.value += 1;
                        state.info.time.value %= 86000;
                        return true;
                    },
                    delay: 1000,
                    loop: true,
                    classes: [
                    ]
                }, state);
                startTimer({
                    id: "suspicion-decay",
                    func: state => {
                        checkSuspicion(state, -0.1);
                        return true;
                    },
                    delay: 100,
                    loop: true,
                    classes: [
                        "free"
                    ]
                }, state);
                startTimer({
                    id: "timeout",
                    func: state => {
                        if (state.info.time.value == 60 * 60 * 7 + 60 * 19) {
                            print(["The fox is almost done with his breakfast..."]);
                        }
                        if (state.info.time.value >= 60 * 60 * 7 + 60 * 20) {
                            print(["Time's up! In you go."]);
                            goToRoom("maw", state);
                            return false;
                        }
                        return true;
                    },
                    delay: 1000,
                    loop: true,
                    classes: [
                        "free"
                    ]
                }, state);
                startTimer({
                    id: "geta-action",
                    func: state => {
                        const random = Math.random();
                        if (random < 0.7) {
                            print(["Geta slurps up a spoonful of cereal."]);
                        } else if (random < 0.9) {
                            state.geta.awareness = 0.1;
                            print(["The fox yawns and stretches."]);
                            startTimer({
                                id: "yawn-end",
                                func: state => {
                                    print(["Geta finishes his stretch"]);
                                    state.geta.awareness = 1;
                                    return true;
                                },
                                delay: 2000,
                                loop: false,
                                classes: [
                                    "free"
                                ]
                            }, state);
                        } else {
                            state.geta.awareness = 2;
                            print(["Geta narrows his eyes and looks around the table. Something seems off to him..."]);
                            startTimer({
                                id: "squint-end",
                                func: state => {
                                    print(["He goes back to his breakfast."]);
                                    state.geta.awareness = 1;
                                    return true;
                                },
                                delay: 4000,
                                loop: false,
                                classes: [
                                    "free"
                                ]
                            }, state);
                        }
                        return 5000
                    },
                    delay: 5000,
                    loop: true,
                    classes: [
                        "free"
                    ]
                }, state);
            },
            "intro": state => {
                print(["Game started", newline, "Exposition goes here later."]);
            }
        },
        "sounds": [
            "loop/stomach.ogg"
        ],
        "preload": [
        ],
        "world": {
            "pepper-grinder": {
                "id": "pepper-grinder",
                "name": "Pepper Grinder",
                "desc": "You're hiding behind a pepper grinder",
                "move": (room, state) => {
                    print(["You dart over to the pepper grinder, which looms over you like a greatwood."]);
                },
                "enter": (room, state) => {
                },
                "exit": (room, state) => {
                },
                "actions": [
                    {
                        name: "Tap",
                        desc: "Bang on the pepper shaker",
                        execute: (room, state) => {
                            print(["You thump the pepper shaker, making a dull thud."]);
                            const safe = checkSuspicion(state, 25);
                            if (safe && getStat("suspicion", state) > 50) {
                                print(["Geta leans in to have a closer look. He's going to catch you if you don't move!"]);
                                startTimer({
                                    id: "pepper-investigate",
                                    func: state => {
                                        if (state.player.location == "pepper-grinder") {
                                            print(["He catches you.", newline, "You're tossed into the fox's jaws."]);
                                            goToRoom("maw", state);
                                        } else {
                                            print(["You evaded the fox."]);
                                        }
                                    },
                                    delay: 3000,
                                    loop: false,
                                    classes: [
                                        "free"
                                    ]
                                }, state);
                            }
                        },
                        show: [
                        ],
                        conditions: [
                        ]
                    },
                    {
                        name: "Wait",
                        desc: "Wait for the fox to finish his breakfast. Surely you'll be able to escape after that...right?",
                        execute: (room, state) => {
                            state.info.time.value = 60 * 60 * 7 + 60 * 20;
                        },
                        show: [
                        ],
                        conditions: [
                        ]
                    },
                ],
                "exits": {
                    "up": {
                        "target": "bowl",
                        "desc": "Walk up to the cereal bowl",
                        "show": [
                        ],
                        "conditions": [
                        ],
                        "hooks": [
                            (room, exit, state) => {
                                return checkSuspicion(state, 10);
                            }
                        ]
                    },
                    "left": {
                        "target": "table",
                        "desc": "Run out into the open",
                        "show": [
                        ],
                        "conditions": [
                        ],
                        "hooks": [
                        ]
                    },
                },
                "hooks": [
                ],
                "data": {
                    "stats": {
                    }
                }
            },
            "bowl": {
                "id": "bowl",
                "name": "Behind the Bowl",
                "desc": "You're crouched behind Geta's bowl of cereal",
                "move": (room, state) => {
                    print(["You scurry up to the looming bowl, staying low and out of Geta's sight."]);
                },
                "enter": (room, state) => {
                },
                "exit": (room, state) => {
                },
                "actions": [
                ],
                "exits": {
                    "ascend": {
                        "target": "in-bowl",
                        "desc": "Climb into Geta's cereal",
                        "show": [
                        ],
                        "conditions": [
                        ],
                        "hooks": [
                        ]
                    },
                    "down": {
                        "target": "pepper-grinder",
                        "desc": "Run back behind the pepper grinder",
                        "show": [
                        ],
                        "conditions": [
                        ],
                        "hooks": [
                            (room, exit, state) => {
                                return checkSuspicion(state, 15);
                            }
                        ]
                    },
                },
                "hooks": [
                ],
                "data": {
                    "stats": {
                    }
                }
            },
            "table": {
                "id": "table",
                "name": "Table",
                "desc": "You're out in the open!",
                "move": (room, state) => {
                },
                "enter": (room, state) => {
                    startTimer({
                        id: "table-suspicion",
                        func: state => {
                            checkSuspicion(state, 1.5);
                            return true;
                        },
                        delay: 100,
                        loop: true,
                        classes: [
                            "free"
                        ]
                    }, state);
                },
                "exit": (room, state) => {
                    stopTimer("table-suspicion", state);
                },
                "actions": [
                ],
                "exits": {
                    "right": {
                        "target": "pepper-grinder",
                        "desc": "Run back to cover",
                        "show": [
                        ],
                        "conditions": [
                        ],
                        "hooks": [
                        ]
                    },
                },
                "hooks": [
                ],
                "data": {
                    "stats": {
                    }
                }
            },
            "in-bowl": {
                "id": "in-bowl",
                "name": "Bowl",
                "desc": "You're in the cereal bowl...",
                "move": (room, state) => {
                    print(["Why did you do that?"]);
                },
                "enter": (room, state) => {
                    stopClassTimers("free", state);
                    startTimer({
                        id: "geta-eat",
                        func: state => {
                            if (Math.random() < 0.6) {
                                print(["Geta scoops up a spoonful of cereal; you narrowly avoid being caught."]);
                                return true;
                            } else {
                                print(["Geta scoops you up and slurps you into his maw."]);
                                goToRoom("maw", state);
                                return false;
                            }
                        },
                        delay: 3000,
                        loop: true,
                        classes: [
                            "free"
                        ]
                    }, state);
                },
                "exit": (room, state) => {
                },
                "actions": [
                ],
                "exits": {
                    "ascend": {
                        "target": "bowl",
                        "desc": "Try to climb back out!",
                        "show": [
                        ],
                        "conditions": [
                        ],
                        "hooks": [
                            (room, exit, state) => {
                                print([
                                    "You grab at the rim of the bowl and try to pull yourself out. Alas, your struggles are for naught; Geta easily scoops you up in his spoon and, a heartbeat later, slurps you into his sloppy jaws. You didn't stand a chance."
                                ]);
                                goToRoom("maw", state);
                                return false;
                            }
                        ]
                    },
                },
                "hooks": [
                ],
                "data": {
                    "stats": {
                    }
                }
            },
            "maw": {
                "id": "maw",
                "name": "Geta's Maw",
                "desc": "You've been slurped up into the fox's jaws",
                "move": (room, state) => {
                    
                },
                "enter": (room, state) => {
                    stopClassTimers("free", state);
                    startTimer({
                        id: "swallow",
                        func: state => {
                            print(["It's too late to escape. You're swallowed down."]);
                            stopTimer("maw-tease", state);
                            goToRoom("throat", state);
                            return true;
                        },
                        delay: Math.random() * 5000 + 6000,
                        loop: false,
                        classes: [
                        ]
                    }, state);
                    startTimer({
                        id: "maw-tease",
                        func: state => {
                            printRandom([
                                ["Your captor teases you with a sharp, sloppy swallow, barely holding you back from plunging down that slick gullet."],
                                ["You're sloshed to and fro, battered against the fox's gums by his undulating tongue."],
                                ["Slobber drenches your body as you're smothered beneath Geta's hot tongue."]
                            ]);
                            return Math.random() * 2000 + 3000;
                        },
                        delay: 3000,
                        loop: true,
                        classes: [
                        ]
                    }, state);
                },
                "exit": (room, state) => {
                },
                "actions": [
                ],
                "exits": {
                },
                "hooks": [
                ],
                "data": {
                    "stats": {
                    }
                }
            },
            "throat": {
                "id": "throat",
                "name": "Geta's Gullet",
                "desc": "GULP!",
                "move": (room, state) => {
                },
                "enter": (room, state) => {
                    startTimer({
                        id: "throat-swallow",
                        func: state => {
                            print(["You slush down into Geta's stomach"]);
                            goToRoom("stomach", state);
                            return true;
                        },
                        delay: 7000,
                        loop: false,
                        classes: [
                        ]
                    }, state);
                },
                "exit": (room, state) => {
                },
                "actions": [
                    {
                        name: "Struggle",
                        desc: "Try to climb back out!",
                        execute: (room, state) => {
                            print(["Nope"]);
                        },
                        show: [
                        ],
                        conditions: [
                        ]
                    },
                    {
                        name: "Give up",
                        desc: "Dive down into Geta's stomach",
                        execute: (room, state) => {
                            print(["You submit to your predator."]);
                            goToRoom("stomach", state);
                            stopTimer("throat-swallow", state);
                        },
                        show: [
                        ],
                        conditions: [
                        ]
                    },
                ],
                "exits": {
                },
                "hooks": [
                ],
                "data": {
                    "stats": {
                    }
                }
            },
            "stomach": {
                "id": "stomach",
                "name": "Geta's Stomach",
                "desc": "Glorp",
                "move": (room, state) => {
                },
                "enter": (room, state) => {
                    playLoop("loop/stomach.ogg");
                    startTimer({
                        id: "digest",
                        func: state => {
                            changeStat("health", -0.3, state);
                            if (getStat("health", state) <= 0) {
                                print(["You're digested before too long."]);
                                goToRoom("digested", state);
                                return false;
                            }
                            return true;
                        },
                        delay: 100,
                        loop: true,
                        classes: [
                        ]
                    }, state);
                },
                "exit": (room, state) => {
                },
                "actions": [
                    {
                        name: "Squirm",
                        desc: "Rub at the walls of the fox's churning stomach",
                        execute: (room, state) => {
                            printRandom([
                                ["You punch and kick at the walls"],
                                ["A powerful churn grabs hold of you, stifling any attempts at struggling"],
                                ["Your little thumps and kicks do little to faze your captor"]
                            ]);
                        },
                        show: [
                        ],
                        conditions: [
                        ]
                    },
                ],
                "exits": {
                },
                "hooks": [
                ],
                "data": {
                    "stats": {
                    }
                }
            },
            "digested": {
                "id": "digested",
                "name": "Fat",
                "desc": "You're just fat now",
                "move": (room, state) => {
                },
                "enter": (room, state) => {
                },
                "exit": (room, state) => {
                },
                "actions": [
                    {
                        name: "Gurgle",
                        desc: "Glorp",
                        execute: (room, state) => {
                            printRandom([
                                ["Grrrrgle"],
                                ["Glorp"],
                                ["Glrrrrrrnnnnnn..."],
                                ["Gwoooooorgle"]
                            ]);
                        },
                        show: [
                        ],
                        conditions: [
                        ]
                    },
                ],
                "exits": {
                },
                "hooks": [
                ],
                "data": {
                    "stats": {
                    }
                }
            },
        }
    });
})();
 |