No More Pancakes

No More Pancakes is een game die gesubmit is voor de Game Maker’s Toolkit game jam 2025, met als thema “Loop”. Vanuit dit thema kwamen we op het idee om een game te maken waarin de speler de loop juist moet doorbreken.

De speler werkt in een pannenkoeken kraam en maakt elke dag pannenkoeken voor langskomende klanten. Wat in eerste instantie onopvalt, is dat elke dag exact hetzelfde verloopt. Dezelfde NPC’s lopen voorbij op precies dezelfde momenten en plaatsen telkens dezelfde bestellingen.

Naarmate de speler dit patroon doorziet, ontstaat de mogelijkheid om vooruit te plannen door bestellingen alvast klaar te maken. De tijd die hierdoor vrijkomt kan worden gebruikt om de omgeving te verkennen en langzaam het geheim achter deze herhalende wereld te ontrafelen.


Teamleden: Andrich Laker, Lloyd Belterman, Eva Makker & Lize-Jin Joosten
Project tijd: 30-07-2025 t/m 03-08-2025
Engine: Unity
Code Languages: C#
Game Jam: GMTK 2025

De NPC’s volgen elke dag een vaste route en doen dezelfde bestelling dit systeem maakt een actie lijst met alle acties die door de npc gedaan moeten worden. Na een order moet hij altijd een vaste route volgen om van het voertuig af te gaan en de laatste actie wordt een verstopt actie, waarbij de npc een bosje zoekt om te verstoppen. Aan het begin van de volgende dag kunnen we de lijst opnieuw uitvoeren voor hetzelfde gedrag. Dit systeem zet de basis voor het loop effect wat we willen creeëren.

 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;
    }

Alle random acties die van te voren worden gedefineerd voor elke npc.