Ryan Chang (ArtlessAvian)

Hello! I’m Ryan. I love algorithms, math, and games. I graduated from UC Irvine in 2022, with a major in Computer Science (Algorithms specialization) and a minor in Math. It’s really useful for problem solving, which lets me make impressive (or silly) projects. On the applied side, I currently work as a Software Engineer. In my free time, I create games. In my personal projects, I care a lot about software archtecture, since its what usually limits the size of projects for me.

Below, I have a few of the games (and game related projects) I’ve made, with descriptions, links, images, and commentary!
(You can click on images to expand them.)

Lizard State

Lizard State is a traditional roguelike in Godot. It has animations, similar to the “Mystery Dungeon” series. It has been my pet project over quarantine.

The focus of this project is its architecture. With lots of prototyping and changing plans, I’ve gone through many iterations trying to best design everything.

My current architecture is based on model-view-viewmodel. It can be a bit cumbersome, but I’m liking it very much.

Between the current iteration, previous attempts, and external experiements,

  • I’ve completely decoupled model and view, using an event queue to communicate between the two.
  • I’ve implemented a vision and fog of war system.
  • I’ve built an pathfinding AI to follow teammates and attack enemies.
  • I’ve generated maps using cellular automata and perlin noise.
(Play in Browser)
(Github Repo)

Fighting Game Development Club

FGDC is a fighting game featuring original characters from the Video Game Development Club at UCI. It’s the last project I made with the club before graduating, so I went all out.

The game also features rollback netcode! A library handled the networking, but relied on its users (us, the developers) to serialize inputs and hash the state. It worked well! Something I wish was within scope was some sort of automated testing to detect regressions. After a desync issue was caught though, git bisect would usually be enough to find the cause.

The main goal was keeping scope managable, with lots of room for stretch goals. There’s only two buttons, meaning six normals (standing, crouching, jumping) and two variants for each command. This was enough for lots of design work, with no filler moves. The animation emphasizes key poses. We wanted a paper aesthetic (a “paper prototype”), which lets us use those poses and imply movement with flipping and spinning. Under these constraints, we hit a lot of stretch goals, making four unique characters.

The “final” build is a little rough but has everything it needs for local play. I planned to fix up loose ends wiht the project after graduating. But I started working and got busy. Dang. I’d still do it if I found a nice opportunity to.

(Play at itch.io)
(Github Repo)

Overload

Overload is a falling blocks puzzle game in Godot. This was a prototype I worked on by myself to pitch to VGDC@UCI.

For code, this game’s design avoids excessive objects, an issue with an earlier project I did with my brother many years before this project. There, the board is represented as a 2D array of block objects. Each block object was stateful.

Rather than have every block be an object, I kept it simple. The board is represented by a jagged array of integers. The number of extra objects is kept minimal. For example, an entire column of falling blocks would be one object. This approach was perfect for this game, and it even allowed me to create unit tests and to apply test-driven development.

As is, it is an exact clone of the SNES game Tetris Attack.

(Play on Itch)
(Github Repo)

Antsylvania

Antsylvania is an action adventure platformer game in Unity. I was a programmer, acting as a bit of a tech lead.

I experimented with making custom physics for the player controller. I built the camera system and a hitbox collision system.

Unfortunately, our team decided not to submit our game to itch.io.

(Github Repo)

Pokémon Team Builder

“VGC Collapse” is a team building assistant running entirely in the browser. It was created as a hackathon project! I was the backend programmer, working on the algorithms and interfacing with the front end.

  • I learned TypeScript in a weekend, so I could make a webapp while still taking advantage of static typing.
  • I learned and implemented an arc consistency algorithm.
  • I coordinated with my team to connect my logic to the frontend.

Funny enough, I was not too familiar with constraint satisfacation. The game-dev world knows of it as “wavefunction collapse,” and I knew of it from there instead.

(Run in Browser!)
(Github Repo)
© 2024    •  Theme  Moonwalk