TONY CHEN

Avalon

June 1, 2021 - October 30, 2021

Summary

Avalon is an in-development VR MMO made by Cyberdream. It features a world builder where users can generate and share content within the world. Players can interact in combat with enemies in these generated worlds using various different combat styles.

Format

Game Engine: Unreal Engine 5 Early Access

Team Size: Fifteen

Duration: 7 months

Roles

Software Engineer

My Contributions

Player Combat

Enemy AI

Build Tool

Player Combat

Combat in Avalon comes in many different modes. Combat is facilitated for both melee and ranged combat which we use a "critical hit" system where the players are rewarded for skilled aiming in VR. Players deal combat damage when hitting an enemy at any point, but are rewarded with extra bonus damage when hit critical points. These critical points are spawned procedurally onto each enemies mesh once they have been attacked.

Another form of combat comes in the form of Abilities known as "Sword Arts". These are a sequence of motions that the player must repeat in tempo with popups. This attack does an additional effect based on how well players perform.

Enemy AI

Enemies in Avalon roam the world. There are multiple types of enemies, robots and goons, each with different attacks. By default, they patrol an area, if a player enters their line of sight, they will move towards the player (as well as nearby enemies) and perform attacks. If multiple enemies reach the player, they take turns to attack and will move around the player. When attacked, a procedurally spawned "block indicator" will popup, the player must place their sword in the correct angle and position in order to block incoming attacks.

Build Tool

The Build Tool is a creative part of Avalon. Since Avalon allows players to create worlds for players to share, this was an important aspect of development. A major hurdle during development is to make sure pieces were able to snap together seamlessly. Our goals is to allow players to create their own pieces so for all pieces to snap properly, this had to be precedurally generated based on the mesh.