Firewise Citizen is a 3D top-down traffic simulation and educational game that teaches players about wildfire evacuation. Players act as community leaders making critical decisions during a wildfire evacuation to avoid loss and ensure safety. Each choice directly impacts the evacuation’s final outcome, offering valuable lessons on emergency preparedness and response.
Role: Gameplay & UI Programmer
Team size: 5
Engine: Unity
I’m responsible for coding all the systems in this game and connecting them together. There are three core systems in this game: Fire simulation, Traffic simulation, and Branching Narrative.
To make level-editing easier, I set up a 3D grid-based grid-based map by projecting the 2D grid onto the XZ plane, allowing designers to quickly draw roads and buildings with brush tools like in 2D game using Tilemap tools. Each cell has its own type: Road, Structure, Empty and be stored in the grid for future uses on the road/structure placing.
For a more accurate traffic simulation, First I have set up a road system that can dynamically adjust each road assets by checking its neighbour cells direction(left, top, right, down) and rotate/modify the assets to align with the neighbour.
Second, I have built a Car AI system that uses a network of Markers and an
Adjacency Graph to navigate
the roads. I used an adjacency graph because it efficiently stores bidirectional markers and allows
quick retrieval for pathfinding. Each road includes Marker objects that define specific positions and
connect to adjacent
markers that act as waypoints. These markers are added to an AdjacencyGraph
where each
Marker becomes a
node (Vertex
) with connections (edges
) to its neighbors. The graph enables the
AI to build flexible
routes, and an A* algorithm calculates the shortest route between two points by
evaluating
the cost of moving from one marker to the next. This allows cars to handle turns, intersections, and
even detours in a realistic way.
The red and green markers represent opposite directions, with red lines indicating valid paths between each marker and its neighboring markers
For fire simulation, in order to make the wildfire spreading effect, I used collision to check with
structure & nature layer . When fire touches a Combustible
object, it gradually decreasing
in size using
Lerp (linear interpolation), which makes the burning simulation feel natural, as if the
combustibles
burning out over time.
To make the fire movement even more realistic, I added a Wind Zone
that affects the fire’s
speed and
direction. The wind move direction changes periodically, giving the fire a natural flow. The wind zone
is designed to be easily adjusted as needed by changing its force, speed. range etc.
For player making choices for the community (the core game play) , I used a HouseTypeInfo
object to
manage each house’s information, including the choices.( HouseChoice
class) Each choice
serves as a
modification to the base properties of the structure, allowing for a flexible and modular approach to
customization.
To efficiently manage multiple options, I used a dictionary to hold all the choices player selected in a list per house type. This approach allows the UI to retrieve option status with an O(1) lookup time, optimizing performance and enabling seamless UI updates. The design supports multi-option menus, allowing players to freely adjust or revert selections before confirming changes, which enhances user experience and control.
Top