Evan

Evan Bay

Hi, I’m Evan, a Computer Science junior at Washington State University. I’ve been programming since middle school and started by installing Linux, learning Java in high school, and later teaching myself C# through personal projects. I’m currently the president of the WSU Game Development Club, where I've been able to ship multiple games, and I’m working on my most ambitious project to date.

Skills:

  • C#

  • C++

  • Python

  • JavaScript

  • Java

  • WinForms

  • Vim

  • Visual Studio

  • NUnit

  • PostgreSQL

  • Unity

  • Godot

Shroomwood

Shroomwood is a top-down action roguelike that was first created during the 2024 Crimson Game Jam and later expanded into a full commercial release on Steam. The game is made with C# in Unity and the team consists of 3 programmers, 2 artists, 2 level designers, and one musician/SFX artist (many are cross-disciplinary). In total, this game has been in production for over a year, in which I was an active developer during half that time.In Shroomwood, the player shoots their way through levels that consist of pre-authored rooms that are randomly placed and connected. In the levels, random items and modifiers can be found that impact the success of the run, determined by whether the player can defeat the level's boss.

My role:

  • Programmer: Designed and developed inventory UI using C# events. Developed health bar UI system to be expandable and to transition states based on health.

  • Level Designer: Created 66 pre-authored levels to be spawned randomly within the generated dungeons. Designed tutorial layout.

Inventory

Inventory:

  • Tooltip object becomes visible on hovered item

  • Tooltip is populated with updated item data based on modifiers (+20% damage)

Health bar

Health Bar:

  • Expands when max health increases

  • Changes color depending on current health

Item stats display

Item Pickup:

  • Displays item information when near the player

Inventory

Tutorial:

  • Changes player values between rooms to demonstrate mechanics


Axis

Axis is a rhythm game written in C# with the Godot game engine. This game was made as part of the Game Development Club at WSU's club projects in 7 weeks.In Axis, the player controls four pads facing outward from the center in four directions. The player can move the top and bottom pads left and right in sync and vice versa for the left and right pads. During the game, keys spawn on one of three lanes and the player must align the pad with the key using the arrow keys and select using WASD at the right time.

Highlights:

  • Key sync system that used parallel arrays (can't export tuples or arrays with more than one dimension in Godot) to determine when to spawn keys in-sync with song.

  • Supports two key states: normal and held. Normal keys are selected by pressing the pad and held keys are selected by holding the pad for a pre-determined amount of time.

  • High score system that wrote score to a .json if it was higher than the previously stored value.

  • Endless mode with a difficulty selection and high scores for each difficulty.

Level Creation

Level Creation:

  • Populated in the editor to allow easy access to level editing.

  • With more time, I would add a tool script that records input in the editor and populates a more cohesive structure.

Key Behavior

Key Behavior:

  • Gets distance between pad and key at hit time to determine hit rating and effect played.

  • Keys spawned most recently have a glowing effect to indicate their urgency.

High Scores

High Scores:

  • Writes the player scores to a .json on the player's system.

  • Populates score dictionaries upon game launch.

Endless Mode

Endless Mode:

  • Gives the player 3 lives and records the score once the player is out of lives.


Ducks in a Row

Ducks in a Row is a physics-driven puzzle game written with GDScript in the Godot game engine. This game was made in 12 hours as part of the University of Idaho's Vandal Game Jam where it won first place overall.In Ducks in a Row, the player plays as a mother duck who must find her baby ducks during a dark and rainy night. If the player or the ducklets collide with the walls, the level is reset. The player must be quick and precise while also prioritizing which ducklets to collect first.Highlights:

  • Each duck/ducklet holds a reference to the next ducklet in the chain. The current ducklet controls the next one by forcing it to maintain a fixed distance, creating a smooth follow-the-leader movement.

  • Main menu populates the background scene with the number of ducks that have been rescued by accessing which levels have been completed and how many ducks are in each level.

  • The player instantiates a virtual mouse in order to work around web build restrictions with Godot (I would have put this somewhere else, but I was running out of time). The web build did not allow Godot to force the mouse position to a point on the screen.

Duck Chain

Duck Chain:

  • Each duck uses the same script that determines if it is the head and behaves accordingly.

  • Ducklets are also lit to indicate their importance and to see collisions

Main Menu

Main Menu:

  • Gets player data to determine which levels have been complete.

  • Randomly populates main menu with the number of ducks rescued.

Level 5

Level Design:

  • The player is taught that when the chain is long, you cannot go around corners without resetting. This makes the player needs to think about which ducks to collect first.


In the Maker's Image

In the Maker's Image is a platformer with movement-based combat written with GDScript in the Godot engine. This game was made in 48 hours during the 2024 Crimson Game Jam in a team of four and won second place. This was my first game jam and first game ever made (that wasn't a tutorial).In In the Maker's Image, the player plays as a robot that wields a large blade. The player uses movement mechanics such as dash and uppercut to gain an advantage over the enemies, platform, and deal damage. This game borrows from souls-like games in its' difficulty and environment.

My role:

  • Created the player controller using a finite state machine to transition between animations and attack types.

  • Created the base functionality for enemy AI used for all enemy types.

  • Other world objects and interactions such as a killzone, player health, health pickups, tutorial text, and next level flag.

Player States

Player States:

  • Player is able to: dash, jab, air attack, and uppercut.

  • The player script tracks the current state which determines what states the player can transition to and how.

Toaster Enemy

Enemy Behavior:

  • Toaster enemy attacks while player is in range by launching toast.

  • Toast launches in an arc to where the player was when the toaster decided to attack (every few seconds).

Interactions

Interactions:

  • Player health bar updates upon player health change.

  • Tutorial text shows combo that can be performed on enemies to juggle them mid-air.

WORK IN PROGRESS