No More Pancakes

No More Pancakes is a game that was submitted for the Game Maker’s Toolkit Game Jam 2025, with the theme “Loop”. Based on this theme, we came up with the idea of creating a game in which the player must break the loop instead of following it.

The player works at a pancake stand and makes pancakes every day for passing customers. What is not immediately noticeable at first is that each day unfolds in exactly the same way. The same NPCs walk by at precisely the same moments and place the same orders every time.

As the player starts to recognize this pattern, the opportunity arises to plan ahead by preparing orders in advance. The time gained in this way can then be used to explore the environment and gradually uncover the secret behind this repeating world.


Teammembers: Andrich Laker, Lloyd Belterman, Eva Makker & Lize-Jin Joosten
Project duration: 30-07-2025 until 03-08-2025
Engine: Unity
Code Languages: C#
Game Jam: GMTK 2025

The NPCs follow a fixed route every day and place the same order. This system creates an action list containing all the actions the NPC needs to perform. After placing an order, the NPC always follows a fixed route to leave the vehicle, and the final action is a hidden action in which the NPC looks for a bush to hide in. At the start of the next day, we can execute the same list again to reproduce identical behavior. This system forms the foundation for the loop effect we wanted to create.

 private List<AIAction> CreateActions(int actionCount, Vector3 startPos, int agentIndex)
    {
        List<AIAction> actions = new List<AIAction>();

        int maxAgentIndex = agentCount - 1;
        int min = 2 + 4 * agentIndex;
        int maxExclusive = actionCount - 2 - 4 * (maxAgentIndex - agentIndex);

        int orderAction;

        if (min >= maxExclusive)
        {
            Debug.Log($"No valid range for agent: {agentIndex}; Using fallback.");
            orderAction = Mathf.Clamp(min, 0, actionCount - 1);
        }
        else orderAction = Random.Range(min, maxExclusive);
        
        for (int i = 0; i < actionCount; i++)
        {
            if (i == 0) actions.Add(new StartPositionAction(startPos));
            else if (i == orderAction) actions.Add(new GoToQueueAction(itemOrders[Random.Range(0, itemOrders.Count)]));
            else if (i == orderAction + 1) actions.Add(new FollowWaypoints(orderDoneWaypoints));
            else if (i == actionCount - 1)
            {
                HidingSpot hidingSpot = bushHidingSpots[Random.Range(0, bushHidingSpots.Count)];
                bushHidingSpots.Remove(hidingSpot);
                actions.Add(new GoToHidingSpotAction(hidingSpot));
            }
            else
            {
                int rnd = Random.Range(0, 6);

                if (rnd == 0 || rnd == 1 || rnd == 2) actions.Add(new RandomMovementAction());
                else if (rnd == 3 || rnd == 4) actions.Add(new MoveToPointOfIntrestAction(pointOfIntrests[Random.Range(0, pointOfIntrests.Length)]));
                else if (rnd == 5) actions.Add(new FollowWaypoints());
            }
        }

        return actions;
    }

All random actions are predefined in advance for each NPC.