Play the game on itch.io

Project info

Fishy Buisness is een project gemaakt met 2 devs en 4 artist. De docenten waren zo enthousiast over de game dat ze zijden dat we de game moesten opgeven voor de Dutch Game Awards en dat hebben we gedaan.

Tijdens dit project heb ik gewerkt aan.

  • Fish Spawner
  • Fish Pooler
  • Fish-Ai
  • GameSaving
  • Fish Spawner

    Met de fish spawners wilde ik bereiken dat er alleen vissen gespawnd worden in zones waar de player is. Voor elke spawner kan ingesteld worden welke vissen en hoeveel per soort er gespawnd kunnen worden. Het leek me handig om makkelijk te kunnen zien welke vissen in welke spawners zitten, dus heb ik met gizmos de namen van de vissen in beeld gebracht. De vissen blijven binnen hun zone doordat je hun eindpositie aangeeft binnen de grootte van de spawner.

    Fish Pooler

    De fish pooler bewaart een aantal vissen om geen nieuwe in te hoeven spawnen. Met twee functies (ReturnFish en GetFish) kunnen er heel makkelijk vissen uit de pooler gehaald en teruggezet worden. Als alle vissen in de pooler in gebruik zijn wordt er een nieuwe aangemaakt en opgeslagen. Komen er door het spawnen te veel vissen in de lijst dan worden de vissen die uitgezet worden ook verwijderd. Hoeveel vissen er in de pooler passen is in de Inspector makkelijk aan te passen.

    Fish-AI

    FishBrain

    De FishBrain regelt de taken die de vis altijd uitvoert zoals roteren richting de eindpositie of in het geval dat de vis aan de haak hangt naar de hengel. Ook worden hier variabelen opgeslagen die alle scripts van de vis nodig hebben, zoals de eindpositie van de vis. Ik draai de vis met een IEnumerator loop en een slerp naar de eindpositie of hengel afhankelijk van in welke state de vis is.

    FishRoaming

    In de FishRoaming wordt een positie gegeven aan de vis om naartoe te zwemmen. Om de zoveel seconden vergelijk ik de interest value van de vis met een random.value om te bepalen of de vis mag gaan bijten waarna de state overgaat naar FishBiting. De vis laat ik bewegen met een MoveTowards. Met een Vector3.distance kijk ik of een vis zijn eindpunt benadert. Met een kleine formule (movespeed *= dist + 0.3f) laat ik de vis vervolgens een beetje remmen.

    FishBiting

    De FishBiting heeft 3 states om bij de houden wat de vis doet met de haak.

    -GoingForHook

    De GoingForHook zet de eindpositie van de vis op de hook. Er kunnen maar X aantal vissen naar de hook toe gaan. Zijn het er al te veel dan kunnen ze bij FishRoaming niet de FishBiting state krijgen. Als de vis de positie van de hook bereikt gaat de state naar OnHook. Gaat de vis te lang achter de hengel aan dan verliest de vis interesse en zwemt verder.

    -OnHook

    Deze state wordt gebruikt wanneer de vis aan de haak zit en niet aan het struggelen is. De positie van de vis wordt hier op de haak geupdatet en regaint stamina in een IEnumerator loop. Als de vis X % stamina heeft kan de vis ervoor kiezen te struggelen.

    -Struggel

    Als de vis begint te struggelen pakt de vis binnen een hoek en de range van de vishengel een positie waar de vis heen moet. De speler drukt nu de rechtermuisknop in om de vis binnen te hengelen.
    Hierbij vermindert de vis zijn stamina en neemt de kracht op de vislijn toe. Komt de spanning tot 0 (start op 255) dan breekt de lijn. Laat de speler de rechtermuisknop los dan zwemt de vis weg.
    Ik houd bij of de eindpositie de struggle-eindpositie is zodat de vis niet een nieuwe positie gaat pakken. Is de stamina van de vis op dan gaat de state naar "OnHook". Als de spanning te hoog is wordt de vis van de lijn gehaald en gaat naar Roaming.

    GameSaving

    Om de game op te slaan maak ik gebruik van JSON-bestanden. De game laadt en slaat alle voortgang op bij het starten en afsluiten van de game en slaat daarnaast alles op om de 5 minuten.