Building Virtual Worlds

Create a new world in just two weeks


Date: May 2020 ~ Dec 2020
Main Purpose: Building Virtual Worlds
Project Size: 2 Game Programmers, 2 Artists and 1 Sound Designer, 2 weeks, 5 rounds
My Contribution: Game Programming Game Design


Pioneered by ETC co-founder Randy Pausch, Building Virtual Worlds (BVW) challenges students to work quickly, creatively, and collaboratively. Part of the immersion semester, BVW gives small teams of students two weeks to create a virtual world, with new groups and goals for each round. It all culminates in a public festival to hundreds of spectators – and an incredible sense of accomplishment. In fact, many BVW ideas go on to become full-time research projects, student spin-offs, and commercial successes. (source: CMU ETC, Building Virtual Worlds)

Gnomes in a robe; 3 players collaboration Game


Round 5
Main Purpose: design a world for the end-of-semester ETC festival. It should be designed to take advantage of the online context being created by the ETC Fall Festival team
Project Size: 2 Game Programmers, 2 Artists and 1 Sound Designer, 3 weeks
My Contribution: Game Programming Air Console Game Design
Stacks: HTML CSS JavaScript C# Unity Air Console

a game trailer


Game description; Welcome to Gnomes in a Robe, where guests will be playing as three gnome brothers working together to obtain a wizard license at the Bureau of Viable Wizards. The license exam is mainly designed for humans, so the gnomes can’t even reach the top of the desks! Work together with your brothers to somehow pass this exam and become a professional viable wizard!

part of controllers

I made magic effects using a particle system. To make intriguing visual effects, I used many techniques, such as velocity, noise, collision, and lights. At first, we wanted to use VFS. We used a particle system because WebGL doesn't support VFX. However, using many particle-system features help me make good-looking visual effects.

I implemented the Air Console controller using HTML, CSS, and JavaScript. Three players have different controllers. I also made an admin page, so the game has four different controllers. Top-gnome-players can see skills and maps. Middle-gnome-players cast a spell. Bottom-gnome-players can move the character using D-pad.

I made an idea of three players-collaboration-game with different roles and controllers. After brainstorming, we improved game design as a team. Through iterations, we were able to make this unique and intriguing game.

This game went to the ETC festival. At the festival, more than 150 people enjoyed the game.


  • I have learned how to make a collaboration game. Because three players have different controllers and roles, I needed to handle various users scenario. I made a communication part between controllers, and Unity can separately process the play data.
  • I gained improved experience with a particle system and VFX. To make it looks better, I learned myself and applied my learning to the game.
  • I implemented a responsive mobile controller. Since it has many text and images, I had to make sure it is readable. Using CSS properties, for example, view-hight view-width, and max-height, I built a readable responsive controller.
  • I have learned scoping and prioritization. Because it is a little out of scope making a three different roles multiplayer game, I had to do many tasks. By communicating with teammates, I prioritized my work and made efficiently working controllers.

Collar ID; Virtual Reality(VR) Game


Round 4
Main Purpose: tell a compelling, meaningful, interactive story where the guest has some ability to interact in order to bring the story to a fulfilling climax
Project Size: 2 Game Programmers, 2 Artists and 1 Sound Designer, 2 weeks
My Contribution: Game Programming VR Game Design
Stacks: Unity C# Steam VR Oculus Vive

part of the game playing


The game is about a person who is a workaholic and has a mundane job. One day, a player gets a dog named Chichi, and she changes the player's life.

I took charge of a game manager, mini-game, and VR. I also contributed to the game design. I suggested the story about depression, a dog, and overcoming depression. After brainstorming, we finalized the storyline.

It was a two weeks project, but the actual time of programming was five days because I was not able to use the VR Room in the first week due to an unexpected schedule change because of COVID-19. So in the first week, we put in the time to create the storyline.

I also had another problem. The other programmer was in China and had no VR device. Therefore, I was the only programmer who can use and test the game using Oculus. To come up with this problem, we over-communicated and did pair-programming. As a result, we were able to complete the development on time.


  • It is my first VR project. I learned how to make a VR game. I used grabbing, throwing, triggering by grab, and so on. I used the Steam VR package and the Oculus package so a player can play the game with Vive and Oculus.
  • I used post-processing to deliver the emotional change of the character. The game starts with a grey-tone world, but Chichi and a player make a world colorful.
  • I learned the importance of time managing and scoping. I didn't have enough time to handle all problems but was too ambitious. I had unexpected obstacles, and the project was too big to thoroughly complete in five days. I had to give up some features.

Our Craft; 4 Players Multiplayer Game


Round 3
Main Purpose: make a fun-focused virtual world in a week
Project Size: 2 Game Programmers, 1 Artist and 1 Sound Designer, 1 week
My Contribution: Game Programming Air Console Game Design
Stacks: HTML CSS JavaScript C# Unity Air Console

part of the game playing (from 0:56)


We only have one week to create a playable and fun game. We can use Air Console, Microphone input, or Web camera input. We decided to use Air Console because we used the other platforms in the previous round.

'Our Craft' is four persons multiplayer game. Players need to collaborate to make furniture for a friend, Alex, who just arrived in Pittsburgh. Players may not have the tools and materials they need, so they need to send and get tools. Players use video chat to communicate with each other.

I handled the Air Console controller using HTML, CSS, JavaScript. Because the essential game proceeds in the controller, I built game logic in the THML file with JavaScript. I also implemented an interpreter for the controller to communicate with Unity. In the game, the Unity part works like a central server of the game, and each mobile controller has game logic codes. Therefore, the Unity part sends initial data to the controller, and the controller takes the game process. When a player completes a piece of furniture, the controller sends data to the Unity part.

I designed an entirely new controller to give players an intriguing game experience. As a result, I made a unique controller. I also implemented a text message scene and announcement feature. So players can smoothly play the game with two different displays (Computer monitor and mobile device).

This game went to the ETC festival.


  • I experienced creating a communication system of two devices. Because game data transfer from mobile devices to a computer and from a computer to mobile devices, we implemented a communication system. And by making the communication part light, players cannot feel any latency when playing the game.
  • It was the first time to build a multiplayer game, and I gained knowledge about multiplayer game logic.
  • I used the proper data structure to handle the game data. For example, I used Map for tools because I need to keep the tools' names and numbers. And I considered that we can always change the gadgets as the game design changed.
  • I learned how to show game elements on a mobile device. I considered various screen sizes and made the controller screen can deal with many different device sizes because I cannot know about the device players are going to use.

Pac-Whale; Facial and Pitch Detection Controller Game


Round 2
Main Purpose: make a naïve guest feel freedom
Project Size: 2 Game Programmers, 2 Artists and 1 Sound Designer, 2 weeks
My Contribution: Game Programming Pitch Detector Unity Animations Game Design
Stacks: C# Unity OpenCV Web Camera Pitch Detector Microphone

part of the game playing by a Naïve Guest (from 4:19:10)


We are not allowed to give any instructions to the guest. We only can use a microphone and web camera as input devices. We asked to create a consistent, highly interactive, and engaging experience that lets naïve guests feel like they have a lot of freedom in the choices they make. Despite this feeling of freedom, we must also ensure they have an enjoyable time in the brief experience you provide for them.

Players start as small fish and can eat smaller fish. They need to avoid being eaten by bigger fish. We built an open-world game, but it has a depth zone system, so players can safely explore the world. We put much effort into the environment, so players can enjoy swimming in the world.

We used every given input, microphone, and web camera. Players can control the fish with the direction of the face and can open the mouse of the fish by opening their mouse. Players can trigger the sonar by making sound using microphone input.

I implemented sonar using microphone input because I know frequency and volume from an electronic engineering background. I decided not to use frequency as an input. Men and women have different ranges of frequency. Therefore it is intricate to use the frequency input as a controller.

I also created the Unity animation using Timeline. I used Timeline making the ending scene and credit scene.


  • I gained knowledge of dealing with data of face detection and voice input. By using these data, I was able to substitute the keyboard and mouse input.
  • I learned how to make an animation in Unity. In the previous round, I only used animations made by artists. In this game, I was able to create animation with Unity using Unity Timeline.
  • I implemented a new Shader for the Sonar effect. I learned how to make a customized shader and how to apply data to the mesh.