P1 Games:
Sunflower

Game Programmer AI / NPC Shaders Narrative Systems Unreal Engine 5

A volunteer game jam project with the P1 Games community — I was on team Mighty Hibiscus from August to October 2024, programming three distinct systems: a dialogue system, deer AI behaviour, and a cel shader post-process effect.

Three systems, eight weeks

Sunflower was a volunteer sprint with a distributed team. My scope covered three independent systems that each fed into different aspects of the game — NPC behaviour, narrative interaction, and visual style. Working across all three simultaneously required clear interfaces between systems so the rest of the team could integrate without depending on my timeline.

Add Deer AI video here

Deer AI behaviour tree — idle, interrupted, and flee states

Deer AI behaviour

A three-state behaviour tree — Roam, Interrupted, and Flee — responding dynamically to the player's proximity. When startled, the deer drops an antler at a waypoint tree and escapes, leaving footprints in snow for the player to follow. The interrupted state correctly returns to roaming once the player leaves range. See the full Deer AI writeup →

  • Three-state behaviour tree — Roam (random forest walk), Interrupted (player detected, drop antler), Flee (escape with snow trail)
  • AI Perception — sight-based detection with configurable radius; perception fires at 0.5s intervals to reduce jitter and device load
  • Enumerator-driven states — clean state machine using Blueprint enumerator; states are readable and easy to extend
  • Known limitation — new random flee location sometimes generates too close to the player; identified fix is to bias the random location away from player position

NPC dialogue system

A modular dialogue system designed in close collaboration with the writers on the team. Built to parse through long interaction sequences with ease, with a structure the designers could work with directly without needing to touch Blueprint code. See the full dialogue system writeup →

Add Cel Shader video / screenshot here

Cel shader — diffuse banding post-process applied to scene

Cel shader

A diffuse post-process shader isolating value bands into fixed steps to create a flat cel-shaded look. Blended at the "scene color before DOF" location to reduce shadow jitter. Later iterated into a PBR-compatible approach — see the full cel shader writeup →

What this taught me

Working across three systems simultaneously in a volunteer jam taught me how to scope ruthlessly and communicate clearly. The deer AI post-mortem in particular — where I documented a known limitation rather than hiding it — was the most honest piece of work I did on this project.

Research Question

How should game jam production be structured to allow individual programmers to work on multiple interdependent systems without creating bottlenecks for the rest of the team?