Ongoing Projects
Coal Echoes

Coal Echoes Personal Project

A four-level narrative exploration game in development, set in an abandoned coal preparation plant. Use photography, a grandfather's diary, and a personal scrapbook to explore working class memories shaped by the 1970s.

Project breakdown

Coal Echoes

Coal Echoes

A four-level narrative exploration game in development, set in an abandoned coal preparation plant. Use photography, a grandfather's diary, and a personal scrapbook to explore working class memories shaped by the 1970s.

My role
Game design, interaction systems & environment integration
Team
Personal portfolio project with AI assistance and third party assets
Timeline
2026 · In development

My Contributions & Implementation

Rendering & visual effects

HDRP · Shader Graph · VFX Graph · HLSL

Created sandstorm and heat haze effects, and rendered the camera's live view of the scene in a newspaper ink style for the game's opening transition.

Implementation details

Uses HDRP 17.4.0 with Shader Graph and VFX Graph, Local Volumetric Fog for sandstorms, and Custom Pass for heat haze.

The newspaper effect copies the menu camera's color buffer after post processing, processes it on the GPU, and displays it in a RawImage. It combines grayscale, subtle halftone dots, paper grain, and uneven ink coverage. The halftone algorithm adapts Daniel Ilett's MIT licensed work.

Opening sequence

DOTween · RenderTexture · TerrainData · HDRI Sky

Synchronized the photograph transition, sky motion, sand accumulation, and material aging. Restored original resources when the sequence ends or is interrupted.

Implementation details

uGUI and TextMesh Pro build the newspaper and player interfaces. DOTween enlarges the newspaper photograph over 1.8 seconds, then fades its ink effect over 1.4 seconds. UIEffect 5.11.7 supplies dissolve and page turning light effects.

Seven material pairs across eight dormitory renderers drive the aging transition. Three RenderTextures blend clean and weathered base colors in linear space, while normal strength, window properties, and rain stains change in sync. Temporary resources are released and original materials restored on completion or interruption.

The opening timeline synchronizes temporary terrain height animation with an independent HDRI sky rotation and material aging. Terrain collision retains the final height data; the original terrain references and sky settings are restored when the transition ends or is interrupted.

Terrain & environment

MapMagic · DEM · C++ · OpenGL · Python

Integrated measured terrain and offline transition results into MapMagic, using a shared height source for terrain geometry and slope materials.

Implementation details

MapMagic manages fixed terrain tiles and LOD using stitched USGS Sheep Range DEM data. A shared C# height source feeds terrain geometry and slope materials. Terrain Tools 5.3.2 supports local editing.

Gradient Terrain Authoring reconstructs terrain transitions. C++ and OpenGL perform the offline solve; Python processes data, refines the solution, and validates results. Unity reads the measured heights and the precomputed 800 metre transition.

Integrated industrial environment assets and a moving cableway with the terrain to support the exploration route.

Interaction & saves

Unity · C# · Input System · JsonUtility

Built photography, album, scrapbook, and diary systems so players can collect photographs, arrange records, and save their exploration progress.

Implementation details

Designed the narrative framework and the four-level exploration route around working class memories shaped by the 1970s, using photography, diary entries, and scrapbooking as the core interactions.

Connected photography to Echo discoveries, using target framing and visibility checks to link photographed objects with narrative discoveries. Unity 6000.4.6f1 and C# implement the interactions, with Input System 1.19 handling player input.

Used JsonUtility to read and write save and diary data. Photos, scrapbook layouts, Echo discoveries, and the grandfather's diary use separate local storage directories.

Development tools

Blender · Python · MCP · Git LFS

Modeled and generated assets with Blender and Python, used AI assistance for scene work, and managed large assets with Git LFS.

Implementation details

Blender 5.2.2 and Python support modeling and parametric generation. Environments also integrate Industrial Harbour, RocksGobi, Lands, and RockyDesert assets, with a CC0 sky HDRI from Poly Haven.

Unity MCP and Unity AI Assistant assist with scene operations and Console inspection; Blender MCP supports the art workflow. Git and Git LFS manage source files and large assets.

Cover art to be decided

Coming soon

Vanishing Fireflies Personal Project

An interactive light installation about ecological disturbance and recovery. Visitor movement and bright light disrupt LED fireflies, while the Kuramoto model shapes their collective flashing rhythm. ESP32 sensing connects to Unity control and sound.

Project breakdown

Vanishing Fireflies

Cover art to be decided

Coming soon

An interactive light installation about ecological disturbance and recovery. Visitor movement and bright light disrupt LED fireflies, while the Kuramoto model shapes their collective flashing rhythm. ESP32 sensing connects to Unity control and sound.

My role
Interaction design, hardware integration, firmware & Unity control
Team
Solo project
Timeline
In development

My Contributions & Implementation

Kuramoto synchronization

C++ · Phase oscillators · Kuramoto model

Adapted Yoshiki Kuramoto's phase oscillator model to let individual fireflies gradually synchronize their flashes, with disturbance weakening their shared rhythm.

Implementation details

Each firefly maintains its own phase. The swarm sums the sine of phase differences between individuals, scales the result by coupling strength and elapsed time, and normalizes it by swarm size to adjust each phase.

Unity commands smoothly raise or lower coupling for either interactive swarm. Disturbance reduces coupling and adds individual phase drift. The background swarm keeps zero coupling and ignores synchronization commands.

Sensing & ecological response

ESP32 · LD2410B · Analog light sensors

Built two independent interaction zones that turn nearby movement and bright light into faster movement, fewer visible fireflies, and dimmer flashes, followed by gradual recovery.

Implementation details

Each zone uses its own LD2410B radar and analog light sensor. Radar distance and movement energy filter the motion input; stationary targets do not add disturbance. Light readings are mapped between configurable thresholds.

Motion and light combine into a smoothed disturbance value for each zone. That value changes motion, brightness, visible population, and phase behavior without affecting the other interaction zone or the natural background.

LED swarm animation

Arduino · FastLED · WS2812B

Configured 420 addressable LEDs across three strips, animating two interactive groups of eight fireflies and a natural background of 35 independent fireflies.

Implementation details

Each firefly has a position, direction, random turning time, and blink phase. Movement reflects at strip boundaries, while brightness envelopes soften the light pulses. The background uses a slower cycle and a cosine envelope.

Separated individual motion and brightness logic, swarm coupling, and hardware input and LED output into distinct firmware files, allowing behavior to be tuned independently of wiring and communication.

Unity control & soundscape

Unity · C# · UDP · TextMesh Pro · AudioSource

Connected the installation to a Unity control panel for synchronization, sensor overrides, live telemetry, and gradual mixing of nature and city sounds.

Implementation details

UDP carries sensor telemetry and commands between ESP32 and Unity. Commands include unique IDs and acknowledgements; disturbance override buttons wait for confirmation before updating their state. Device discovery and connection feedback support setup and monitoring.

Unity maps disturbance to city sound intensity and blends the soundscape over time. Separate automatic and manual controls manage nature audio, city audio, light input, and disturbance for demonstrations and calibration.

Cover art to be decided

Coming soon

Desert Restoration Simulator Personal Project

A desert restoration simulation. Plant trees, build factories, and mine for resources while balancing income against ecological damage. Watch wind, sand, heat haze, and the sky respond to your decisions.

Project breakdown

Desert Restoration Simulator

Cover art to be decided

Coming soon

A desert restoration simulation. Plant trees, build factories, and mine for resources while balancing income against ecological damage. Watch wind, sand, heat haze, and the sky respond to your decisions.

My role
Gameplay systems & environmental effects
Team
Personal project
Timeline
In development

My Contributions & Implementation

Economy & ecological tradeoffs

Unity · C#

Connected planting costs, factory income, mining payouts, and pollution so that funding restoration also creates environmental pressure.

Implementation details

Factories generate continuous income with diminishing returns and an overall cap, while mining pays out in timed stages. Affordability checks connect the available budget to planting, construction, and extraction.

Factory pollution periodically removes trees and updates the environmental state. Players can demolish factories to stop their ongoing ecological cost.

Terrain placement & land use

Unity Terrain · C# · Coroutines

Built shared occupancy rules for trees and factories, making planting, construction, and mining change the same landscape.

Implementation details

Trees occupy shuffled free grid cells, sample terrain height, and grow through scale animation with randomized prefabs, rotation, and final size.

Factories cluster around existing plants and reserve their footprints to prevent factory overlap. Placement first avoids trees, then allows clearing when space is limited. Mining removes trees within a sampled circular area.

Environmental feedback

C# · uGUI

Mapped player decisions to an environmental index that controls wind, sand density, heat haze, and the transition toward a clear sky.

Implementation details

Normalized tree, factory, and mining counts feed a weighted environmental score. A shared effects API blends between parameter snapshots, while planting thresholds progressively reduce sand and heat and change sky clarity and cloud coverage.

The decision UI connects planting, construction, demolition, and mining actions to the economy and placement systems. Environment and money events refresh the displayed state.

Sand & heat rendering

URP 17.4 · HLSL · Render Graph

Implemented coordinated ground sand, airborne sand, and heat distortion to make environmental change visible throughout the scene.

Implementation details

A shared global wind vector drives shader scrolling. Airborne sand uses layered transparent surfaces with noise, scene depth fading, and distance fading to soften intersections and layer boundaries.

A custom URP renderer feature supports Render Graph and distorts the scene color for heat haze. Depth and world height masks control where the distortion appears.

Completed Projects
Seafloor Revival

Seafloor Revival Game Jam Team Project

A 2.5D underwater base building game made for GMTK Game Jam 2025. Lead a sea hare civilization, gather resources, unlock technology, and rebuild through recurring pollution disasters.

Project breakdown

Seafloor Revival

Seafloor Revival

A 2.5D underwater base building game made for GMTK Game Jam 2025. Lead a sea hare civilization, gather resources, unlock technology, and rebuild through recurring pollution disasters.

My role
UI development
Team
6 credited creators
Timeline
July 30 to August 3, 2025 · Jam window

Tools & technology

  • Unity

    UI layout, component configuration, and reference binding.

  • C#

    UI data interfaces and an animated clock.

What I owned & delivered

  • Configured Unity UI layouts, components, and references for the resource bar, population display, and time panel.
  • Implemented UI data interfaces to synchronize five resource counts, the sea hare count, and the shelter population with the display.
  • Developed an animated UI clock that maps cycle timing to hand rotation, providing a visual indicator of progress through the current cycle.
Mask

Mask Game Jam Team Project

A 2D platformer made for Global Game Jam 2026. Explore the roles we take on in life and peel away layers of masks to discover the self beneath.

Project breakdown

Mask

Mask

A 2D platformer made for Global Game Jam 2026. Explore the roles we take on in life and peel away layers of masks to discover the self beneath.

My role
Not yet documented
Team
Not yet documented
Timeline
Not yet documented

Tools & technology

Not yet documented

What I owned & delivered

My individual responsibilities and contributions will be added here.

La Luna: Star Sweeper

La Luna: Star Sweeper Team Project

A 15 minute, two player board game made by a team of three and inspired by Pixar's La Luna. Walk across a 5 × 5 moon whose edges loop around, sweep up stars, and use meteors and 28 action and special cards to outplay your opponent. Whoever collects the most stars wins.

Project breakdown

La Luna: Star Sweeper

La Luna: Star Sweeper

A 15 minute, two player board game made by a team of three and inspired by Pixar's La Luna. Walk across a 5 × 5 moon whose edges loop around, sweep up stars, and use meteors and 28 action and special cards to outplay your opponent. Whoever collects the most stars wins.

My role
Gameplay & card design
Team
3 person team
Timeline
Not yet documented

Tools & technology

  • Figma

    Designing and laying out the guidebook together with the team.

What I owned & delivered

  • Designed one third of the game's cards.
  • Drafted the first version of the gameplay.
  • Made the guidebook in Figma together with the team.